1. 程式人生 > >java設計模式:責任鏈模式

java設計模式:責任鏈模式

責任鏈模式

將接收者物件連成一條鏈,並在該鏈上傳遞請求,直到有一個接收者物件處理他,通過讓更多物件有機會處理請求,避免了請求傳送者和接收者之間的耦合。 下面通過一個生活中的事例比如“申請折扣”來說明責任鏈模式。 你去買房子或買車,全款買的,所以想申請一個折扣,如果只是5%以內的折扣,普通的銷售人員估計就能批准,但是如果你買的更多,想申請更大的折扣20%或30%等等,這就不是普通銷售人員有權做決定的,這個“申請折扣”的請求必將上傳,交給更上級的人處理請求。

客戶類

//客戶,申請折扣
public class Customer {
	private PriceHandler pricehandler;
	
	public void setPricehandler(PriceHandler pricehandler) {
		this.pricehandler = pricehandler;
	}

	public void requestDiscount(float discount){
		pricehandler.processDiscount(discount);//處理折扣請求
	}
	public static void main(String[] args) {
		Customer customer = new Customer();
		//設定customer的接待人員(sales)
		customer.setPricehandler(PiceHandlerFactory.createPriceHandler());
		Random rand=new Random();
		//申請10次折扣
		for(int i=1;i<=10;i++){
			System.out.print(i+":");
			customer.requestDiscount(rand.nextFloat());
		}
	}
}

處理者抽象類

/*
 * 價格處理人,負責處理客戶折扣申請
 */
public abstract class PriceHandler {
	protected PriceHandler successor;//後繼,相當於連結串列中的後繼,用於傳遞請求

	public void setSuccessor(PriceHandler successor) {
		this.successor = successor;
	}
	/*
	 * 處理折扣申請
	 */
	abstract public void processDiscount(float discount);
	
	
}

構造責任鏈類

public class PiceHandlerFactory {
	//為handler構造整個責任鏈(工廠函式)
	public static PriceHandler createPriceHandler() {
		PriceHandler sales=new Sales();
		PriceHandler lead = new Lead();
		PriceHandler Man=new Manager();
		PriceHandler dir=new Director();
		PriceHandler vp=new VicePresident();
		PriceHandler ceo=new CEO();
		sales.setSuccessor(lead);   //設定後繼
		lead.setSuccessor(Man);
		Man.setSuccessor(dir);
		dir.setSuccessor(vp);
		vp.setSuccessor(ceo);
		return sales;
	}
}

Manager類

//銷售經理,可以批准30%以內的折扣
public class Manager extends PriceHandler {

	@Override
	public void processDiscount(float discount) {
		if(discount<=0.3){
			System.out.format("%s批准了折扣:%.2f%n",this.getClass().getName(),discount);
		}else{
			successor.processDiscount(discount);
		}

	}

}

其他處理類就不一一貼出來了,只是批准折扣不一樣。

Customer類main函式執行結果


相關推薦

java 設計模式 -- 責任模式

ddc 結果 fun intercept lock -s xtend print blog 設計模式 – 責任鏈模式 介紹: 責任鏈模式是一種動態行為模式,有多個對象,每一個對象分別擁有其下家的引用。連起來形成一條鏈。待處理對象則傳到此鏈上

我的Java設計模式-責任模式

設計模式 Android Java 今天來說說程序員小猿和產品就關於需求發生的故事。前不久,小猿收到了產品的需求。產品經理:小猿,為了迎合大眾屌絲用戶的口味,我們要放一張圖,要露點的。小猿:......露點?你大爺的,讓身為正義與純潔化身的我做這種需求,還露點。產品經理:誤會誤會,是放一張暴露一點

Java設計模式-責任模式

對象行為型模式 結束 PE 缺點 滿足 repl top 調用 規則 責任鏈模式又稱為職責鏈模式,在23種設計模式中歸類為行為型模式。行為型模式可以分為類行為型模式和對象行為型模式。 類行為型模式使用繼承關系在幾個類之間分配行為,類行為型模式主要通過多態等方式來分配父類與子

重走Java設計模式——責任模式(Chain of Responsibility Pattern)

責任鏈模式 定義 使多個物件都有機會處理請求,從而避免了請求的傳送者和接受者之間的耦合關係,將這些物件連結成一條鏈,並沿著這條鏈傳遞該請求,直到有物件處理它為止。 程式碼示例 我們建立抽象類AbstractLogger,帶有詳細的日誌記錄級別。然後我們建立三

從原始碼角度理解Java設計模式--責任模式

本文內容思維導圖如下:                                        

Java設計模式責任模式

責任鏈模式的定義:         使多個物件都有機會處理請求,從而避免了請求的傳送者和接受者之間的耦合關係。將這些物件連成一條鏈,並沿著這條鏈傳遞該請求,直到有物件處理它為止。 責任鏈模式的重點是在“鏈”上,由一條鏈去處理相似的請求在鏈中決定誰來處理這個請求,並返回相

java設計模式:責任模式

責任鏈模式 將接收者物件連成一條鏈,並在該鏈上傳遞請求,直到有一個接收者物件處理他,通過讓更多物件有機會處理請求,避免了請求傳送者和接收者之間的耦合。 下面通過一個生活中的事例比如“申請折扣”來說明責任鏈模式。 你去買房子或買車,全款買的,所以想申請一個折扣,如果只是5

Java設計模式——責任模式(Chain of Responsibility)

責任鏈 責任鏈模式通俗來說就是關聯一串能夠處理事務的物件,使多個物件都有機會處理請求,從而避免了請求的傳送者和接收者之間的耦合關係。將這些物件連成一條鏈,並沿著這條鏈傳遞該請求,直到有物件處理它為止。【view事件處理】【okhttp interceptors

Java設計模式----責任模式

簡述:     前端時間再看一些類庫的原始碼,發現責任鏈模式的強大之處,尤其是和建造者模式的結合後強大的動態可擴充套件性更是牛逼的一塌糊塗。接下來趕緊了解一下吧!     我們先來了解一下什麼是責任鏈模式:     職責鏈模式(Chain of Responsibil

設計模式責任模式

[] .com repl ring replace servlet 就業 返回 array 責任鏈將處理請求在鏈條的節點上傳遞,每到一個節點可被處理或者也可不被處理。 典型的是在servlet中過濾器filter的的處理方式。當request請求或者response請求時,

設計模式——責任模式

IT ger bst student AR down OS 分享圖片 我們 背景: 想必獎學金大家都不陌生,在學校裏獎學金往往分為三種班獎學金、院級獎學金以及校級獎學金,但是我們往往苦於政策修改,不知道自己的獎學金該找誰領,於是乎就詢問順序就是:班級輔導員->學院老師

Groovy 設計模式 -- 責任模式

IT class att lin Language cti efault make each Chain of Responsibility Pattern http://groovy-lang.org/design-patterns.html#_chain_of_res

設計模式-責任模式在實際項目中的使用

模式 getc erro build strac orm collected pack server   最近一次叠代,參與了公司數據應用平臺的開發,其中負責的一塊功能早早的就完成了代碼的編寫工作,即將進入測試階段,因為有時間思考和總結代碼編寫中遇到的難題,便想著將代碼做一

設計模式 | 責任模式及典型應用

本文的主要內容: 介紹責任鏈模式 請假流程示例 責任鏈模式總結 原始碼分析Tomcat Filter中的責任鏈模式 更多內容可訪問我的個人部落格:laijianfeng.org 關注【小旋鋒】微信公眾號,及時接收博文推送 **** 責任鏈模式 一個事

設計模式 --- 責任模式

1.定義 使多個物件都有機會處理請求,從而避免了請求的傳送者和接受者之間的耦合關係。將這些物件連成一條鏈,並沿著這條鏈傳遞該請求,只到有物件處理它為止。   2.使用場景 多個物件可以處理同一請求,但具體由哪個物件處理則在執行時動態決定。 在請求處理者不明確的情況下向多

unity設計模式-----責任模式

責任鏈模式的定義:責任鏈模式指的是--某個請求需要多個物件進行處理,從而避免請求的傳送者和接收之間的耦合關係,將這些物件連成一條鏈子,並沿著這條鏈子傳遞請求,直到有物件處理它為止 例如: 從生活中的例子可以發現,某個請求可能需要幾個人的審批,即使技術經理審批完了,還需要上一級的審批.   &

設計模式-行為型模式-責任模式

設計模式-行為型模式-責任鏈模式 定義 將請求沿著鏈傳遞,然後直到物件處理即可。 UML圖 程式碼 基本的責任鏈 public class Test{ public void test(int i, Request request){ if(i == 1){

設計模式-責任模式(responsibility)

責任鏈模式是行為模式的一種,該模式構造一系列的分別擔當不同職責的類的物件(HeaderCar、BodyCar、FooterCar)來共同完成一個任務,這些類的物件之間像鏈條一樣緊密相連。 角色和職責: 1.抽象處理者(Handler)-CarHandler:   2.具體處理者(Concr

移動開發之設計模式- 責任模式(IOS&Android)

資源 完全參照 責任鏈模式|菜鳥教程但不包括IOS程式碼 責任鏈模式 顧名思義,責任鏈模式(Chain of Responsibility Pattern)為請求建立了一個接收者物件的鏈。這種模式給予請求的型別,對請求的傳送者和接收者進行解耦。這種型別的設計模式屬於行為型模式。

“戲”說設計模式——責任模式

首先請出今天的主人公——“齊天大聖”孫悟空 原創文章,禁止轉載https://blog.csdn.net/wfy2695766757   小時候每到假期,電視上就會播出大家耳熟能詳的“西遊記” 。 那麼今天我們就通過“齊天大聖”孫悟空大鬧天宮來描述23種設計模式中之一的