using system;
namespace decorator
public
class
:fruit
}//水果抽象裝飾者
public
abstract
class
fruitdecorator
:fruit
//種植水果
public
override
void
plant()
}}//為fruitdecorator類派生兩個具體類
//鬆土裝飾者
public
class
loosensoildecorator
:fruitdecorator
//這裡base() 是呼叫fruitdecorator類的建構函式
public
override
void
plant()
//為果樹鬆土
private
void
loosen()
}//灌溉裝飾者
public
class
manuredecorator
:fruitdecorator
//這裡base() 是呼叫fruitdecorator類的建構函式
public
override
void
plant()
//為果樹澆水
private
void
manure()
}class
program
}}
**解析
在裝飾者模式中滿足了用組合代替繼承的原則,以及開放封閉原則。例項**中fruitdecorator類與fruit類通過組合關係來擴充套件plant方法,fruit實現了對plant方法擴充套件的開放和修改的封閉。
注意:
介面卡模式與裝飾者模式都是對類的功能進行修改,介面卡模式實現了類方法介面形式的修改而不改變其功能,而裝飾者模式的目的是改變類的方法的功能而不改變方法介面的形式。
C 設計模式(九)裝飾者模式
首先實現乙個學生學習的功能,例項化乙個學生物件,然後呼叫學生的學習方法,現在有新的需求,學生學習前需要預習課程,學習後需要複習課程,老師答疑。要求 在不改動原有封裝的前提下實現以上功能。在這種情況下,就得使用aop 面向切面程式設計 程式設計思想,我們就用 繼承 組合 裝飾者模式來實現aop 實現要...
設計模式(九) 裝飾者模式
優點 可以提供比繼承更多的靈活性,原有 無須變動,只是在原物件上裝飾一層 外衣 可以動態擴充套件乙個物件的功能,在執行時選擇不同的裝飾器,從而實現不同的行為。缺點 會產生很多的小物件,增加了系統的複雜性 比繼承更加靈活,同時意味著比繼承更易出錯,排錯也困難,對於多次裝飾的物件,可能需要逐級排查。適用...
設計模式學習 裝飾者模式
當我們來到kfc開始點餐的時候,一開始還不是特別有胃口,所以只點了乙份漢堡 有乙份漢堡和飲料,但後來又點了乙份薯條,最後乾脆再點乙份炸雞腿,那麼如何來計算我們花了多少錢呢?在這個場景下,裝飾者模式會起到很好的效果。定義 動態的將責任附加到物件身上。若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方...