裝飾者模式

2021-09-24 10:14:55 字數 1945 閱讀 7490

裝飾模式指的是在不必改變原類檔案和使用繼承的情況下,動態地擴充套件乙個物件的功能。它是通過建立乙個包裝物件,也就是裝飾來包裹真實的物件。—可將裝飾者理解為包裝者,它無所不包,萬物皆可為我所包裝。(包裝在這裡是為物件擴充套件功能的意思)

遵循開放-關閉原則

**因如晚霞中的蓮花一樣關閉(免於改變),,又如晨曦中的蓮花一樣開放(能夠擴充套件)

星星咖啡店有四種型別的咖啡:綜合的,拿卡的,美式的,濃縮型的咖啡,對應成本是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 ...