命令模式和裝飾者模式的區別

2021-08-28 03:17:17 字數 661 閱讀 6255

所謂的設計模式,很多都是針對物件導向程式設計的(即符合物件導向的三大特性六大原則),也就是針對不同業務場景需求,需要設計一些比較好的類關係圖,

其中包括繼承和組合,繼承包括實現介面(like-a)和繼承抽象類(is-a)及繼承子類(is-a)三種方式;組合方式(has-a),一般通過構造方法或者setter方法來傳入需要組合的類例項方式(依賴注入)。

命令模式和裝飾者模式的區別:

其中比較明顯的區別就是裝飾者模式中component被裝飾後依然是component(因為採用了繼承的方式),同時為了達到可以方便的真實去裝飾具體其他component,所以需要傳入被裝飾的component例項(這裡採用了組合方式)。而命令模式卻不同,發出命令者和執行命令者並不是同一類(沒有繼承關係),都是通過組合實現的,發出命令者和命令真實執行者被這個command徹底隔離,其實也可以看作真實執行者被command類包裝了,或者說**了。

tips:上圖菱形加乙個實線和箭頭表示組合了某個父類關係,直線加乙個空心三角形表示繼承關係,直線加乙個箭頭表示組合了某個具體子類的關係。

裝飾者模式

裝飾者模式 動態地將責任附加到物件上。若要擴張功能,裝飾者提供了比繼承更有彈性的替代方案。裝飾者可以在所委託被裝飾者的行為之前或之後,加上自己的行為,以達到特定的目的。裝飾者與被裝飾者物件具有相同的超型別。include include using namespace std class bever...

裝飾者模式

裝飾者模式,是在不改變原類檔案和使用繼承的情況下,動態地擴充套件乙個物件的功能。它是通過建立乙個包裝物件,也就是裝飾來包裹真實的物件。裝飾者模式中的角色 1 被裝飾者抽象component,是乙個介面或抽象類,就是定義最核心的物件,也是最原始的物件,這個類是需要裝飾類的基類。2 被裝飾者具體實現co...

裝飾者模式

裝飾者模式 裝飾者模式的好處是便於擴充套件,對乙個東西不管怎麼變,只需要找到相應的元件去改變它 1.如何組裝在一起 建立主題 packetbodycreator body new packetbodycreator 建立header packethtmlheadercreator html new ...