裝飾者模式

2021-08-19 11:11:09 字數 2094 閱讀 7555

參考

* 裝飾者模式就是主要為被裝飾物件更新方法中的內容,當裝飾者類有多種(即可以裝飾多種不同的內容時),通過建立實現了「被裝飾物件實現的介面」(如該例中的drink)的抽象類為它們的基類,

* 那這些裝飾者子類物件便能相互組合(如該例中的牛奶+豆漿、糖+牛奶+豆漿等)

* @author pc

* @date 2023年4月27日下午2:57:02

* @version v1.0

*/public class decoratorpattern

}inte***ce drink

/** * 抽象出乙個介面,作為裝飾者建構函式的引數,即被裝飾者的父類

* @author pc

* @date 2023年4月27日下午1:01:21

* @version v1.0

*/class soya implements drink

@override

public double getprice()

/*@override

public string proud() */

}/**

* 裝飾者基類,被裝飾物件的原型放在這裡(引用被傳進來)。下面的裝飾者物件只是附加或者更新了行為(方法)

* * @author pc

* @date 2023年4月27日下午12:34:33

* @version v1.0

*/abstract class decorator implements drink

@override

public string getinfo()

@override

public double getprice()

}/**

* 裝飾者類-糖,更新了行為(方法)

* @author pc

* @date 2023年4月27日下午1:01:30

* @version v1.0

*/class sugar extends decorator

@override

public string getinfo()

@override

public double getprice()

public string proud()

}/**

* 裝飾者類—牛奶,更新了行為(方法getinfo、getprice),新增了行為proud(該類物件繼續被裝飾後,此方法無法被下級裝飾者物件呼叫),可被該裝飾者物件呼叫。

* 若要使新增的proud能被下級裝飾者物件呼叫,則需要在drink中新增該方法,裝飾者基類也要重寫該方法。

* 故一般不用來新增新的方法。只用來更新原有的方法或者說向原有的方法增加新的行為(如先執行super.getinfo,再執行新定義的行為等)

* @author pc

* @date 2023年4月27日下午1:02:47

* @version v1.0

*/class milk extends decorator

@override

public string getinfo()

@override

public double getprice()

public string proud()

}/**

* 裝飾者類—黑豆,更新了行為(方法getinfo、getprice),新增了行為proud(該類物件繼續被裝飾後,此方法無法被下級裝飾者物件呼叫),可被該裝飾者物件呼叫

* @author pc

* @date 2023年4月27日下午1:04:56

* @version v1.0

*/class blackbean extends decorator

@override

public string getinfo()

@override

public double getprice()

public string proud()

}

裝飾者模式

裝飾者模式 動態地將責任附加到物件上。若要擴張功能,裝飾者提供了比繼承更有彈性的替代方案。裝飾者可以在所委託被裝飾者的行為之前或之後,加上自己的行為,以達到特定的目的。裝飾者與被裝飾者物件具有相同的超型別。include include using namespace std class bever...

裝飾者模式

裝飾者模式,是在不改變原類檔案和使用繼承的情況下,動態地擴充套件乙個物件的功能。它是通過建立乙個包裝物件,也就是裝飾來包裹真實的物件。裝飾者模式中的角色 1 被裝飾者抽象component,是乙個介面或抽象類,就是定義最核心的物件,也是最原始的物件,這個類是需要裝飾類的基類。2 被裝飾者具體實現co...

裝飾者模式

裝飾者模式 裝飾者模式的好處是便於擴充套件,對乙個東西不管怎麼變,只需要找到相應的元件去改變它 1.如何組裝在一起 建立主題 packetbodycreator body new packetbodycreator 建立header packethtmlheadercreator html new ...