java設(shè)計模式-裝飾者模式

模式定義

動態(tài)的將新功能附加到對象上,在對象功能擴(kuò)展方面,它比繼承更有彈性。

設(shè)計原則

多用組合,少用繼承

類應(yīng)設(shè)計的對擴(kuò)展開放,對修改關(guān)閉。

UML類圖

裝飾者模式實例

先寫一個被裝飾者食物的類

被裝飾者-食物類

/**

* 被裝飾者-食物類

*/

public class Food {

private StringfoodName;

? ?public Food() {

}

public Food(String foodName) {

this.foodName = foodName;

? ?}

public Stringmake() {

return foodName;

? ?}

}

再定義幾個裝飾者類

裝飾者-面包類

/**

* 裝飾者-面包類

*/

public class Breadextends Food {

private Foodfood;

? ?public Bread(Food food) {

this.food = food;

? ?}

public Stringmake() {

return food.make() +"+面包";

? ?}

}

裝飾者-奶油類

/**

* 裝飾者-奶油類

*/

public class Creamextends Food {

private Foodfood;

? ?public Cream(Food food) {

this.food = food;

? ?}

public Stringmake() {

return food.make() +"+奶油";

? ?}

}

裝飾者-蔬菜類

/**

* 裝飾者-蔬菜類

*/

public class Vegetableextends Food {

private Foodfood;

? ?public Vegetable(Food food) {

this.food = food;

? ?}

public Stringmake() {

return food.make() +"+蔬菜";

? ?}

}

測試裝飾者模型

public class DecoratorDemo {

public static void main(String[] args) {

Food food =new Bread(new Vegetable(new Cream(new Food("香腸"))));

? ? ? ?System.out.println(food.make());

? ?}

}

運行結(jié)果

香腸+奶油+蔬菜+面包Process finishedwithexitcode0

這就相當(dāng)于生活當(dāng)中制作三明治的過程,我們先加一根香腸,再香腸上抹上一層奶油,再加上幾片蔬菜,最后拿面包夾上。

java.io中的裝飾者模式

總結(jié)

裝飾者模型就是動態(tài)地添加更多功能的一種方式,是一種組合和委托的思想,但是會導(dǎo)致設(shè)計中出現(xiàn)許多小類,如果過度使用,會讓程序變得很復(fù)雜,難以看明白。

歡迎關(guān)注我的公眾號“java工會”,與君共勉



最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容