裝飾模式又被稱為包裝模式。通過對客戶端透明的方式來拓展物件的功能,是繼承關係的一種替代方案
假設,現在要給qq秀裡的人物設計裝扮衣服,每個人可按自己不同的喜好搭配不同的衣服。
先建立person類,它裡面有乙個show()展示(也是穿衣服)的方法
public
class
person
public
person
(string name)
//後面整合的子類都要覆蓋該方法
public
void
show()
}
再建立乙個finerydecorator的裝飾類,繼承person類
public
class
finerydecorator
extends
person
@override
public
void
show()
}
相繼建立各種各樣的衣服類,都繼承與finerydecorator裝飾類
//t恤
public
class
tshirts
extends
finerydecorator
}//大垮褲
public
class
bigtrouser
extends
finerydecorator
}//後面的類,以此類推
/** ....
*/
檢驗成果,測試:
public
static
void
main
(string[
] args)
裝飾者模式可以動態地將責任附加到物件上.若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案。
裝飾者和被裝飾者之間必須是一樣的型別,也就是要有共同的超類。在這裡應用繼承並不是實現方法的複製,而是實現型別的匹配。因為裝飾者和被裝飾者是同乙個型別,因此裝飾者可以取代被裝飾者,這樣就使被裝飾者擁有了裝飾者獨有的行為。根據裝飾者模式的理念,我們可以在任何時候,實現新的裝飾者增加新的行為。如果是用繼承,每當需要增加新的行為時,就要修改原程式了。
設計模式筆記(四) 裝飾模式
裝飾模式 decorator 裝飾模式是為已有功能動態的新增更多功能的一種方式。using system namespace studesignmode.decorator public abscustomer public abscustomer string name public virtua...
設計模式系列(四) 裝飾模式
動態的為乙個物件的某些職責新增一些額外的功能,與通過繼承來獲得新功能相比,decorator 更加的靈活 試想一下,如果沒有 decorator,轉而使用繼承,每當想要為乙個物件新增某個功能時,我們就需要生成乙個子類。當需要這些功能的組合時,就要生成更多的具有組合功能的子類。這會產生兩個問題 1.類...
設計模式(四) 裝飾器模式
裝飾器模式 動態的將責任附加到物件上,若要擴充套件功能,裝飾者提供了比繼承更有彈性的替代方案。意圖 將乙個介面轉換為另乙個介面 設計原則 開閉原則 對類的擴充套件開放,對修改關閉 裝飾器模式設計要點 1.裝飾者和被裝飾物件有相同的超型別 2.可以用乙個或者多個裝飾者去包裝乙個物件 3.裝飾者可以在所...