需要設計圓、矩形兩種形狀,同時設計這兩種形狀的紅色、藍色版本,按照傳統的思路,使用繼承的方式,則如下圖:
按這種方式,當需要的形狀和顏色種類增多時,所定義的類的數量將會急劇增多,而且類之間會有很多重複的**。如果運用裝飾模式的思想,依照「組合優先於繼承」原則,將「顏色」單獨定義為乙個「裝飾類」,該類也繼承自抽象基類,且擁有乙個抽象基類的指標,用於操作傳入的不同的形狀物件。這樣,在定義裝飾類物件時,傳入不同的形狀物件,就可以實現基本形狀——圓、矩形和裝飾——紅色、藍色的任意組合了,如下圖:
class shape //定義抽象基類——形狀;};
class circle:public shape //定義形狀的子類——圓
};class blueshape:public shapedecorator//繼承裝飾類,定義裝飾——藍色
virtual void draw()
};int main()
執行結果:
設計模式之Decorator 家裝篇
設計模式之 decorator 家裝篇 最近家裡搞裝修,做了一套家具,需要刷一下漆,因此我就去市場找了油漆師傅和油漆徒弟兩個人。油漆師傅主要買油漆和調油漆,油漆徒弟主要來 刷油漆 團隊精神?哈哈,不禁讓讓我想起 cs,你先衝,我揀菜。1 在這裡,我們先把這個油漆工作定義成乙個介面類 public i...
Decorator設計模式
雖然設計模式分得太細會有過度的趨勢,decorator某種程度上也是一種facade模式。但是實現起來還是比較漂亮的。而後面那個人的class arlist list,ilist的方法就不是decorator。它沒有乙個內部的list。這樣 however,now all of list s met...
設計模式 decorator模式
裝飾者模式體現了 敏捷開發思想中的 對類要 開放擴充套件,關閉修改.例子 乙個person主類 若干裝飾品類 紅衣服,藍衣服,藍鞋子,紅鞋子 測試 new乙個person 給他穿上紅衣服藍鞋子 code person介面 public inte ce ipersonperson類 package c...