裝飾器模式簡單來說就是通過乙個裝飾器,不斷的去增強基類的現有功能,而不是去擴充子類。
舉個例子:還是原來的汽車例子,有寶馬bwm和奧迪audi兩個車
class
car;
class
bwm:
public car};
class
audi
:public car
};
如果我們想給兩種車上藍芽,無疑我們能夠通過增加子類的方式去新增藍芽功能:
class
bwmbluetooth
:public bwm
};
但是這樣每增加乙個功能,不同的車型都需要增加乙個子類,這樣會造成整個專案之中存在大量的子類。
這個時候我們就需要裝飾器了。
裝飾器通過和產品繼承自乙個基類來達到不斷對其修飾,針對乙個自基類繼承的方法,先是呼叫自身所指向的汽車物件,然後在後面寫上所要增加的功能:
class
lightdecorator
:public car
void
show()
private
: car* pcar_;};
class
bluetoothdecorator
:public car
void
show()
private
: car* pcar_;};
intmain()
[1] 施磊.c++高階.圖論科技.2020.7.
c 設計模式 裝飾器模式
裝飾器和被裝飾的物件必須有完全一致的方法名。只是在裝飾器的方法中會呼叫被裝飾物件的同名方法 如果裝飾器和被裝飾的物件方法名不一致,那麼將導致裝飾之後的結果不能再次被另外乙個裝飾器裝飾 因為方法名已經變了 base class 裝飾器模式的基類,被裝飾物件 元件和裝飾器模板都需要繼承自基類 class...
C 設計模式 裝飾器模式
裝飾器模式,顧名思義就是對乙個主體進行修飾。原理就是用乙個新的類去包含乙個舊的類,在新的類中先呼叫舊的類的方法,再呼叫新的類中新新增的方法。這樣就實現了鏈式呼叫。然後可以不斷的新增新的修飾類去修飾。為了能使新的類 裝飾類 能夠包含舊的類 主體類或者已經經過修飾的修飾類 就需要統一基類,所以不論是主體...
設計模式 裝飾器模式 C 實現
裝飾器模式 動態的給乙個物件新增一些額外的職責,而不是給整個類新增一些功能。場景 1.以動態透明的方式給單個物件新增職責 2.不採用子類的方式進行擴充。裝飾器模式更加靈活的向物件新增職責,可以新增和分離方法,用裝飾在執行時刻增加和刪除職責。裝飾物件的介面和它所裝飾的物件的介面是一致的。裝飾模式採用把...