1. 程式人生 > >【設計模式學習筆記】責任鏈模式

【設計模式學習筆記】責任鏈模式

責任鏈模式,將請求和處理物件分離,將請求傳送給一個請求處理入口後,誰具有請求的處理許可權,誰就處理請求。

文章目錄

每年這個時候大概都是公司的聚餐季。但是我們的汽車廠,領導們飯後還有特別活動,比如討論個“來年計劃”啥的。我不清楚,我沒當過領導。

1.1 請求入口Position

這裡我們將請求的處理者分級,使用Position型別的nextPostion屬性。接著建立該類的構造器、set方法等等。這都沒什麼好說的。關鍵的是giveNotice方法。方法的第一個引數是我們的請求級別,第二個引數就是請求的內容。通過不斷判斷nextPosition中的level是否符合條件決定是否將請求交給物件處理。

package responsibilitychain;

public abstract class Position {
	private int level;
	private Position nextPosition;
	private String name;

	public void giveNotice(int level, String notice) {
		if(level>=this.level) {
			System.out.println(this.name+"獲取:"+notice);
		}
		if(this.nextPosition == null)
{ return; } this.nextPosition.giveNotice(level, notice); } public void setNextPosition(Position position){ this.nextPosition = position; } public Position(int level, String name) { super(); this.level = level; this.name = name; } }

1.2 繼承Position

通過繼承我們實現幾個不同級別的請求處理者。

package
responsibilitychain; /************************************************ *@ClassName : Woker *@Description : TODO *@Author : NikolaZhang *@Date : 【2018/12/12 0012 21:44】 *@Version : 1.0.0 *************************************************/ public class Master extends Position { public Master(int level, String name) { super(level, name); } }

可以看到每個請求處理者只是重寫了構造器。以後我們例項化一個處理者物件的時候就設定其對應級別level。

1.3 最近聚餐,周知周知

package responsibilitychain;

/************************************************
 *@ClassName : Test
 *@Description : TODO
 *@Author : NikolaZhang
 *@Date : 【2018/12/12 0012 21:45】
 *@Version : 1.0.0
 *************************************************/

public class Test {
    public static void main(String[] args) {
        Position master = new Master(1,  "大BOSS");
        Position leader = new Leader(2,  "組長");
        Position worker = new Worker(3,  "勞動者");
        master.setNextPosition(leader);
        leader.setNextPosition(worker);
        master.giveNotice(3,  "今晚吃個飯");
        master.giveNotice(2,  "飯後唱個K");

    }
}

聚餐通知是最低級別的,所有人都會看到。但是唱k通知只有領導們才會看到。

1.4 結果

在這裡插入圖片描述

參考

【菜鳥教程】:http://www.runoob.com/design-pattern/chain-of-responsibility-pattern.html


最近開始忙了~~~不能快快樂樂的寫部落格了。。。。悲傷。。