【設計模式學習筆記】責任鏈模式
阿新 • • 發佈:2018-12-31
責任鏈模式,將請求和處理物件分離,將請求傳送給一個請求處理入口後,誰具有請求的處理許可權,誰就處理請求。
文章目錄
每年這個時候大概都是公司的聚餐季。但是我們的汽車廠,領導們飯後還有特別活動,比如討論個“來年計劃”啥的。我不清楚,我沒當過領導。
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
最近開始忙了~~~不能快快樂樂的寫部落格了。。。。悲傷。。