命令模式:
命令模式:將“請求”封裝成對象,以便使用不同的請求、日志柬采、隊列等來參數(shù)化其他對象。命令模式也支持撤銷操作且警。
設(shè)計原則:
把方法的調(diào)用封裝起來粉捻,調(diào)用此對象不需要知道它內(nèi)部具體是如何運行的,只需要知道包裝成型的方法
命令模式的本質(zhì)是對命令進行封裝斑芜,將發(fā)出命令的責任和執(zhí)行命令的責任分割開
將“動作請求者”從“動作執(zhí)行者”中解耦肩刃,即將發(fā)出請求的對象和接受并執(zhí)行請求的對象分離開來。兩者通過命令對象溝通
命令模式的關(guān)鍵在于引入了抽象命令接口,且發(fā)送者針對抽象命令接口編程盈包,只有實現(xiàn)了抽象命令接口的具體命令才能與接收者相關(guān)聯(lián)
特點:
對象只知道通過接口暴露出execute()方法沸呐,當此方法調(diào)用時,接受者執(zhí)行具體的動作呢燥。對象不知道那個接受者執(zhí)行了什么動作崭添,只知道操作進行了
NoCommand對象:execute()方法為空的對象,即不執(zhí)行任何操作的對象叛氨『粼客戶端處理null操作時交給空對象,而無需做if(command != null)操作寞埠。
撤銷操作:在管理一組操作對象的對象中可以添加一個上一個操作的對象引用屁置,用于追蹤最后調(diào)用的命令,并通過命令的undo()方法實現(xiàn)撤銷仁连。同樣在操作命令對象中也可添加局部變量記錄上一個狀態(tài)以實現(xiàn)undo()方法蓝角。
可使用堆棧記錄操作過程中的每一個命令,實現(xiàn)多次撤銷
宏命令:同時執(zhí)行多個命令饭冬,軟編碼使鹅,傳入命令數(shù)組,動態(tài)決定哪些命令
日志請求:使用命令模式的記錄日志伍伤,我們可以將上個檢查點之后的操作都記錄下來并徘,如果系統(tǒng)出現(xiàn)問題,從檢查點開始執(zhí)行命令
隊列請求:把一組命令放到隊列(先進先出)中扰魂,線程從隊列中一個一個刪除命令麦乞,然后調(diào)用它的excecute()方法。
適配器模式:
設(shè)計:
實現(xiàn)想要轉(zhuǎn)換的接口
取得要適配的對象的引用劝评,作為局部變量
用要適配的對象的方法實現(xiàn)接口中的方法
客戶使用適配器的過程:
通過目標接口調(diào)用適配器方法
適配器使用被適配者的接口轉(zhuǎn)換成對被適配者的調(diào)用
客戶端接受調(diào)用結(jié)果姐直,但并未察覺適配器在中轉(zhuǎn)的作用
特點:
將類的接口轉(zhuǎn)換成想要的接口,以便實現(xiàn)不同的接口蒋畜,符合用戶的期望
適配器實現(xiàn)了目標接口声畏,并持有被適配者的實例
客戶與適配器是解耦的
可以通過實現(xiàn)雙邊的接口設(shè)計雙向的適配器
使用對象的組合,被適配者的子類也可以搭配適配器使用
外觀模式:
特點:
將一個或多個類的復(fù)雜的一切隱藏在背后姻成,只露出一個干凈美好的外觀
通過提供一個有著更合理接口的外觀類插龄,將復(fù)雜的子系統(tǒng)變得容易操作
外觀只是提供了一些簡化的操作,沒有把子系統(tǒng)的高級操作隔離起來科展,依然將子系統(tǒng)完整的暴露出來均牢,因此也可以訪問子系統(tǒng)的接口
外觀并沒有實現(xiàn)新的行為,只是將子系統(tǒng)的操作合理的組合
一個子系統(tǒng)可以有多個外觀才睹,并可以創(chuàng)造分層次的外觀
優(yōu)點:
外觀不只簡化了接口徘跪,也將用戶從復(fù)雜的子系統(tǒng)中解耦出來
外觀vs適配器:
外觀的目的是簡化接口甘邀,適配器的目的是轉(zhuǎn)換接口
“最少知識”原則:不要讓太多的類耦合在一起以至于修改系統(tǒng)中的一部分會影響到其他部分
我們可以調(diào)用的方法:
該對象本身
被當作方法參數(shù)傳進來
此方法中所創(chuàng)建的對象實例
對象的任何組件