職責鏈模式
職責鏈:當客戶提交乙個請求時,請求是沿著鏈傳遞,直至有乙個concretehandler物件負責處理,接收者和傳送者都滅有對方的明確資訊,且鏈中的物件自己也並不知道鏈的結構,僅需保持乙個指向其後繼者的引用。
具體實現
在機房重構中職責鏈主要用於確定學生的消費時間,以下為具體的實現:
抽象類
public abstract class handler//處理請求的抽象類
public abstract line_info getcumetime(line_info line);
}
具體處理者類,處理它負責的請求,也可以訪問它的後繼者
//未到達準備時間+最少上機時間
public class preparetime : handler
else
return line;}}
具體處理者類,處理它負責的請求,也可以訪問它的後繼者
//超過準備上機時間+最少上機時間的消費時間
public class consumetime : handler
else
return line;}}
bll層
//呼叫職責鏈模式,計算花費時間
//建立具體的處理物件,例項化時就將"物件的具體執行者"傳過去
chainmodel.preparetime preparetime = new chainmodel.preparetime();
chainmodel.consumetime consumtime = new chainmodel.consumetime();
//從最開始的低層,設定上級
preparetime.setsuccessor(consumtime);
//從鏈的最低層開始執行
line_info line1 = preparetime.getcumetime(line);
總結
認真了解一下職責鏈模式的uml圖,實踐起來並不難。對於大型的專案來說,還是要考慮該請求的末端,確保該請求在此鏈中最終得到處理。
C 機房重構 下機之職責鏈模式
前言 說到設計模式,又熟悉又陌生,為什麼這麼說呢?熟悉是因為學過設計模式,明白了當時學習的例子 陌生是因為放到重構不會用,參考了很多部落格,才知道如何用這個職責鏈模式。內容 bll層 沒有設計準備時間,上機滿一分鐘即收費。public class chainbll public decimal co...
重構 下機 職責鏈模式
使用者下機,進行金錢和時間的計算,需要進行多重判斷 在責任鏈模式裡,很多物件由每乙個物件對其下家的引用而連線起來形成一條鏈。請求在這個鏈上傳遞,直到鏈上的某乙個物件決定處理此請求。發出這個請求的客戶端並不知道鏈上的哪乙個物件最終處理這個請求,這使得系統可以在不影響客戶端的情況下動態地重新組織和分配責...
機房重構 下機 職責鏈模式 策略模式(理論篇)
第一次機房收費系統的時候,我們側重於功能的實現,對於大範圍的使用if.else,沒有太明顯的感覺。可當我們學完設計模式之後,才發現原來多次使用if.else,會使程式產生很高的耦合性,不便修改。對於同樣的下機內容,我們除了要用到七層的知識,可能最大的收穫就是去學習如何把設計模式運用到實踐中去了。1 ...