裝飾者模式

2021-09-02 01:18:11 字數 2534 閱讀 2987

裝飾模式指的是在不必改變原類檔案和使用繼承的情況下,動態地擴充套件乙個物件的功能。它是通過建立乙個包裝物件,也就是裝飾來包裹真實的物件。

例項如下:

package com.syy.test.decorator;

/**         

* @projectname mp-test5    

* @classname schoolreport    

* @description    基礎類 裡面有兩個方法 

* @author 孫元元    

* @date 2023年11月27日 下午5:16:56                  

*/public abstract classschoolreport

package com.syy.test.decorator;

/**         

* @projectname mp-test5    

* @classname fivereport    

* @description     基礎實現類

* @author 孫元元    

* @date 2023年11月27日 下午5:17:27                  

*/public classfivereportextends schoolreport

@override

public void sign()

}package com.syy.test.decorator;

/**         

* @projectname mp-test5    

* @classname decoratorreport    

* @description   裝飾類 需要繼承基礎類 對基礎類裡的行為進行擴充套件  

* @author 孫元元    

* @date 2023年11月27日 下午5:15:13                  

*/public abstract classdecoratorreportextends schoolreport

public void report()

public void sign()

}package com.syy.test.decorator;

public classhighreportextends decoratorreport

private void high()

@override

public void report()

}package com.syy.test.decorator;

public classsortreportextends decoratorreport

private void sort()

@override

public void report()

}package com.syy.test.decorator;

public classfather

}執行結果:

我們班的最高分:

語文:75分 

數學:69分 

體育:80分 

本次考試的的成績:

語文:65分 

數學:60分 

體育:75分 

本次考試我在班裡的排名:19

家長簽名:   

裝飾模式是對繼承的有力補充,你要知道繼承可不是萬能的,繼承可以解決實際的問題,但是在專案中你要考慮諸如易維護、易擴充套件、易復用等,而且在一些情況下(比如上面那個成績單例子)你要是用繼承就會增加很多了類,而且靈活性非常的差,那當然維護也不容易了,也就是說裝飾模式可以替代繼承,解決我們類膨脹的問題,你要知道繼承是靜態的給類增加功能,而裝飾模式則是動態的給增加功能,你看上面的那個例子,我不想要 sortreport 這層的封裝也很簡單呀,直接在 father 中去掉就可以了,如果你用繼承就必須修改程式。

優點:1. decorator模式與繼承關係的目的都是要擴充套件物件的功能,但是decorator可以提供比繼承更多的靈活性。

2. 通過使用不同的具體裝飾類以及這些裝飾類的排列組合,設計師可以創造出很多不同行為的組合。

缺點:1. 這種比繼承更加靈活機動的特性,也同時意味著更加多的複雜性。

2. 裝飾模式會導致設計中出現許多小類,如果過度使用,會使程式變得很複雜。

3. 裝飾模式是針對抽象元件(component)型別程式設計。但是,如果你要針對具體元件程式設計時,就應該重新思考你的應用架構,以及裝飾者是否合適。當然也可以改變component介面,增加新的公開的行為,實現「半透明」的裝飾者模式。在實際專案中要做出最佳選擇。

設計原則:

1. 多組合,少繼承。

利用繼承設計子類的行為,是在編譯時靜態決定的,而且所有的子類都會繼承到相同的行為。然而,如果能夠利用組合的做法擴充套件物件的行為,就可以在執行時動態地進行擴充套件。

2. 類應設計的對擴充套件開放,對修改關閉。

裝飾者模式

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

裝飾者模式

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

裝飾者模式

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