設計模式 裝飾器模式

2021-10-09 20:31:21 字數 2287 閱讀 7114

裝飾器模式組成:

抽象元件角色(component): 定義可以動態新增任務的物件的介面

具體元件角色(concretecomponent):定義乙個要被裝飾器裝飾的物件,即 component 的具體實現

抽象裝飾器(decorator): 維護對元件物件和其子類元件的引用

具體裝飾器角色(concretedecorator):向元件新增新的職責

一.裝飾者模式的定義:

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

舉乙個例子:假如我們去奶茶店買奶茶,有兩個品種蜂蜜奶茶和珍珠奶茶。這兩種奶茶分別可以加糖,加牛奶,加冰等等 加不同的料收費不同,如果我們想要用程式輸出他們的**和名字如何做呢?首先想到的就是把他們公共的部分抽象成乙個介面,不管是什麼奶茶都有**,名稱於是我們可以把這一部分抽象成介面。然後用去實現這個介面,那麼會有蜂蜜奶茶類,蜂蜜奶茶加糖,蜂蜜奶茶加牛奶等等的類。這還僅僅只是加一種料哦,如果可以需要加糖又加牛奶那麼又需要乙個類,這樣設計的話我們的子類會非常的繁多。所以應對這種情景的設計模式就出現了。貼上**

#region component構建介面(抽象構建) ,奶茶介面,提供奶茶名稱以及奶茶**方法

public inte***ce imilktea

#endregion

#region concretecomponent 具體構建(主體類)也就是需要拓展的物件

public class honeytea : imilktea

public void milkteaname()

}public class peraltea : imilktea

public void milkteaname()

}#endregion

#region decorator類

public class teadecorator : imilktea

public int milkprice()

public void milkteaname()

public virtual void addname()

public virtual int addprice()

}#endregion

#region concretedecorator具體裝飾類

public class addcoffeedecorator : teadecorator

public override void addname()

public override int addprice()

}public class addicedecorator : teadecorator

public override void addname()

public override int addprice()

}#endregion

teadecorator 裝飾器類,它裡面有抽象介面的引用,當執行起來的時候它實際上就是表示具體被裝飾物件。該設計模式主要用來拓展物件的功能。來看看它如何被呼叫

//decorator裝飾模式

//需要擴充套件乙個類的功能,或給乙個類增加附加功能。

//需要動態的給乙個物件增加功能時(可隨時撤銷)。

//例如下面乙個例子:假如不止是蜂蜜奶茶和珍珠奶茶

//假如不止是加咖啡和冰塊,假設6種名稱的奶茶和10種口味的

//將他們設計成類的話至少有6*10個類(不包括組合的,一種奶茶加很多口味的情況)

imilktea honeytea = new honeytea();

honeytea.milkteaname();

console.writeline("**是:" + honeytea.milkprice());

honeytea = new addcoffeedecorator(honeytea);

honeytea.milkteaname();

console.writeline("**是:" + honeytea.milkprice());

honeytea = new addicedecorator(honeytea);

honeytea.milkteaname();

console.writeline("**是:" + honeytea.milkprice());

輸出如下: 

設計模式 裝飾器模式

裝飾器模式 decorator pattern 允許向乙個現有的物件新增新的功能,同時又不改變其結構。這種型別的設計模式屬於結構型模式,它是作為現有的類的乙個包裝。這種模式建立了乙個裝飾類,用來包裝原有的類,並在保持類方法簽名完整性的前提下,提供了額外的功能。public inte ce playe...

設計模式 裝飾器模式

裝飾者模式的應用場景 裝飾者模式 decorator pattern 是指在不改變原有物件的基礎之上,將功能附加到物件上,提供了比繼承更有彈性的替代方案 擴充套件原有物件的功能 屬於結構型模式。裝飾者模式在我們生活中應用也比較多如給煎餅加雞蛋 給蛋糕加上一些水果 給房子裝修等,為物件擴充套件一些額外...

設計模式 裝飾器模式

定義 裝飾模式可以動態的給乙個物件增加一些額外的功能 增強功能 相比於繼承,裝飾模式能對不支援繼承的類進行增強 並且比繼承更靈活,不需要生成大量的子類。角色 實現 public abstract class house public abstract void sleep public class ...