設計模式之模板方法模式、策略模式、命令設計模式
一、模板方法模式
模板方法模式需要開發抽象類和具體子類的設計師之間的協作。一個設計師負責給出一個演算法的輪廓和骨架,另一些設計師則負責給出這個演算法的各個邏輯步驟。代表這些具體邏輯步驟的方法稱做基本方法(primitive method);而將這些基本方法彙總起來的方法叫做模板方法(template method)。
抽象模板(AbstractTemplate):1、定義了一個或多個抽象操作,以便讓子類實現。這些抽象操作叫做基本操作。2、定義並實現了一個模板方法。這個模板方法一般是一個具體方法,步驟在相應的抽象操作中,推遲到子類實現。
具體模板(Concrete Template):1、實現父類所定義的一個或多個抽象方法。2、每一個抽象模板角色都可以有任意多個具體模板角色與之對應,而每一個具體模板角色都可以給出這些抽象方法的不同實現
二、策略模式
GoF《設計模式》中說道:定義一系列演算法,把它們一個個封裝起來,並且使它們可以相互替換。該模式使得演算法可獨立於它們的客戶變化。
抽象策略角色:策略類,通常由一個介面或者抽象類實現。
具體策略角色:包裝了相關的演算法和行為。
環境角色:持有一個策略類的引用,最終給客戶端呼叫。
具體的實現方法:
首先,定義一個介面,在接口裡有一個抽象的方法,可以叫做抽象決策。
然後,定義一些演算法,分別用有一些類來實現這些介面,可以叫做具體策略類。
其次,定義一個類,將這些演算法封裝起來,可以叫做環境角色。
最後通過呼叫環境角色,在環境角色中分別呼叫具體策略類,實現最紅的目的。
策略模式的好處是客戶端不需要知道每一個演算法具體的實現方法,只需要知道演算法的名稱,呼叫即可。
三、命令設計模式
GoF《設計模式》中說道:將一個請求封裝為一個物件,從而使你可用不同的請求對客戶進行引數化;對請求排隊或記錄請求日誌,以及支援可撤銷的操作。
Command類:是一個抽象類,類中對需要執行的命令進行宣告,一般來說要對外公佈一個execute方法用來執行命令。
ConcreteCommand類:Command類的實現類,對抽象類中宣告的方法進行實現。
Client類:最終的客戶端呼叫類。
Invoker類:呼叫者,負責呼叫命令。
Receiver類:接收者,負責接收命令並且執行命令。