前言:前陣子拖著沒弄完的機房重構這次重新完善,發現有一些設計模式並沒有體現出來,所以今天加了乙個職責鏈模式
機房重構中,上機的過程需要經過諸多判斷,因此這個過程使用職責鏈模式是完全可以的。
首先建立職責鏈專案,新建引用(entity、idal、dal,僅供參考),建立以下類
handler類是乙個抽象類,用來被子類重寫和設定子類方法的後繼方法。
using system;
using system.collections.generic;
using system.linq;
using system.text;
using system.threading.tasks;
using system.data;
namespace chainmodel
//設定下乙個處理物件
public void setsuccessor(handler successor)
//抽象處理方法,使子類重寫它,實現不同行為,多型的原理
public abstract void handlerrequest(_7.entity.onlineentity cardid);}}
*設定handler的引數為idal層是為了能夠呼叫dal層的方法獲取相應引數進行判斷,而又保證**的低耦合。
下一步建立chain_iscardid類,繼承handler類,在裡面寫好邏輯判斷。
using system;
using system.collections.generic;
using system.linq;
using system.text;
using system.threading.tasks;
using system.data;
namespace chainmodel
//重寫父類方法,體現多型
public override void handlerrequest(_7.entity.onlineentity cardid)
else}}
}
之後建立chain_iscash類,判斷是否餘額不足
using system;
using system.collections.generic;
using system.linq;
using system.text;
using system.threading.tasks;
using _7.entity;
using system.data;
namespace chainmodel
public override void handlerrequest(_7.entity.onlineentity cardid)
else}}
}
下一步建立chain_isonline,判斷是否上機
using system;
using system.collections.generic;
using system.linq;
using system.text;
using system.threading.tasks;
using _7.entity;
using system.data;
namespace chainmodel
public override void handlerrequest(_7.entity.onlineentity cardid)
else}}
}
本來開始是想把上機的操作也放到職責鏈中,但因為引用的問題(不知道為什麼不能引用ui層,不能引用就不能呼叫ui層的控制項進行操作),所以沒有放進來。機房合作的時候注意這個問題!
職責鏈弄好之後,我們在bll層呼叫職責鏈模式,並設定後繼方法的順序鏈與開始執行的位置:
//職責鏈模式 上機,新增職責鏈模式上機方法
public datatable online_model(_7.entity.onlineentity cardid)
之後在facade層呼叫b層減少耦合,最後在u層呼叫f層的語句,加入上機後需要的操作,就完成了!
public class onlinefacade
}
private void btnonline_click(object sender, eventargs e)
結尾:之前單純學習設計模式的時候都能理解,但實際應用,還是在又有class類又有winform類的七層中使用還是會阻礙重重,比如引用、不同型別的轉換,就比如我這裡為了省事,幾個子類職責鏈內返回的引數都是datatable類。這些如果不琢磨透的話,一開始很容易吃大虧的。 C 機房重構 下機(職責鏈模式)
職責鏈模式 職責鏈 當客戶提交乙個請求時,請求是沿著鏈傳遞,直至有乙個concretehandler物件負責處理,接收者和傳送者都滅有對方的明確資訊,且鏈中的物件自己也並不知道鏈的結構,僅需保持乙個指向其後繼者的引用。具體實現 在機房重構中職責鏈主要用於確定學生的消費時間,以下為具體的實現 抽象類p...
機房重構 職責鏈模式應用
我是在上機許可權選擇中使用了職責鏈模式。首先來了解一下職責鏈模式 使多個物件都有機會處理請求,從而避免請求的傳送者和接收者之間的耦合關係。將這個物件連成一條鏈,並沿著這條鏈傳遞該請求,直到有乙個物件處理它為止。在機房收費系統裡,登入使用者的級別相當於請求,處理者是一般使用者許可權 一般使用者處理者 ...
C 機房重構 下機之職責鏈模式
前言 說到設計模式,又熟悉又陌生,為什麼這麼說呢?熟悉是因為學過設計模式,明白了當時學習的例子 陌生是因為放到重構不會用,參考了很多部落格,才知道如何用這個職責鏈模式。內容 bll層 沒有設計準備時間,上機滿一分鐘即收費。public class chainbll public decimal co...