裝飾模式指的是在不必改變原類檔案和使用繼承的情況下,動態地擴充套件乙個物件的功能。它是通過建立乙個包裝物件,也就是裝飾來包裹真實的物件。—可將裝飾者理解為包裝者,它無所不包,萬物皆可為我所包裝。(包裝在這裡是為物件擴充套件功能的意思)
遵循開放-關閉原則
**因如晚霞中的蓮花一樣關閉(免於改變),,又如晨曦中的蓮花一樣開放(能夠擴充套件)
星星咖啡店有四種型別的咖啡:綜合的,拿卡的,美式的,濃縮型的咖啡,對應成本是1,2,3,4。喝咖啡的配料有牛奶,摩卡,豆漿,奶泡。對應成本是0.1,0.2,0.3, 0.4
現在的要求是設計乙個訂單系統,能夠模擬使用者的訂單情況,並列印使用者訂單產品的生產成本是多少
裝飾者和被裝飾物件有相同的超型別
你可以用乙個或多個裝飾者包裝乙個物件
既然裝飾和被裝飾物件有相同的超型別,所以在任何需要原始物件的(被包裝的)場合,可以用裝飾過的物件代替它
裝飾者可以在所委託被裝飾者的行為之前/或之後,加上自己的行為,以達到特定的目的
物件可以在任何時候被裝飾,所以可以在執行時動態的,不限量的用你喜歡的裝飾者來裝飾物件。
1.設計乙個飲料beverage抽象類,它有乙個抽象方法cost(),還有乙個描述description屬性
public
abstract
class
beverage
public
abstract
double
cost()
;//該方法必須要在子類中實現
}
2.設計乙個調料condiment裝飾者類,繼承超類beverage。有乙個抽象的getdescription方法
public
abstract
class
condiment
extends
beverage
}
3.設計飲料的具體實現類,濃縮咖啡和美式咖啡。它們要在構造方法中修改超類的descption屬性的值
public
class
compresscoffee
extends
beverage
@override
public
double
cost()
}
public
class
ameracacoffee
extends
beverage
@override
public
double
cost()
}
4.設計各個裝飾者。編寫牛奶,摩卡,豆漿,奶泡類分別繼承調料condiment這個裝飾者類。這些裝飾者中都有beverage型別的屬性,並且通過它們的構造方法能夠為beverage賦初值。
public
class
milk
extends
condiment
@override
public string getdescription()
@override
public
double
cost()
}
public
class
mocha
extends
condiment
@override
public string getdescription()
@override
public
double
cost()
}
5.測試程式:
public
class
starstar
}
裝飾者模式
裝飾者模式 動態地將責任附加到物件上。若要擴張功能,裝飾者提供了比繼承更有彈性的替代方案。裝飾者可以在所委託被裝飾者的行為之前或之後,加上自己的行為,以達到特定的目的。裝飾者與被裝飾者物件具有相同的超型別。include include using namespace std class bever...
裝飾者模式
裝飾者模式,是在不改變原類檔案和使用繼承的情況下,動態地擴充套件乙個物件的功能。它是通過建立乙個包裝物件,也就是裝飾來包裹真實的物件。裝飾者模式中的角色 1 被裝飾者抽象component,是乙個介面或抽象類,就是定義最核心的物件,也是最原始的物件,這個類是需要裝飾類的基類。2 被裝飾者具體實現co...
裝飾者模式
裝飾者模式 裝飾者模式的好處是便於擴充套件,對乙個東西不管怎麼變,只需要找到相應的元件去改變它 1.如何組裝在一起 建立主題 packetbodycreator body new packetbodycreator 建立header packethtmlheadercreator html new ...