裝飾者設計模式

2022-01-15 08:08:37 字數 2653 閱讀 7347

在現實生活中,常常需要對現有產品增加新的功能或美化其外觀,如房子裝修、相片加相框等。在軟體開發過程中,有時想用一些現存的元件。這些元件可能只是完成了一些核心功能。但在不改變其結構的情況下,可以動態地擴充套件其功能。所有這些都可以釆用裝飾模式來實現。

裝飾(decorator)模式的定義:指在不改變現有物件結構的情況下,動態地給該物件增加一些職責(即增加其額外功能)的模式,它屬於物件結構型模式。

其主要缺點是:裝飾模式增加了許多子類,如果過度使用會使程式變得很複雜。

星巴克咖啡訂單專案(咖啡館):

咖啡種類/單品咖啡:espresso(義大利濃咖啡)、shortblack、longblack(美式 咖啡)、decaf(無因咖啡)

調料:milk、soy(豆漿)、chocolate

要求在擴充套件新的咖啡種類時,具有良好的擴充套件性、改動方便、維護方便

使用oo的來計算不同種類咖啡的費用: 客戶可以點單品咖啡,也可以單品咖 啡+調料組合

首先抽象出乙個drink類,它是乙個抽象構件(component)角色:定義乙個抽象介面以規範準備接收附加責任的物件

public abstract class drink 	

}

接下來就是乙個具體的構件角色了,

public class espresso extends coffee 

}

public class longblack extends coffee 

}

public class shortblack extends coffee

}

public class decaf extends coffee 

}

以上是四個具體的構件角色。

現在要往咖啡中加調料:milk、soy(豆漿)、chocolate 等

我們也是通過抽象裝飾(decorator)角色:繼承抽象構件,幷包含具體構件的例項,可以通過其子類擴充套件具體構件的功能。

public class decorator extends drink 

@override

public float cost()

@override

public string getdes()

}

抽象裝飾中聚合了drink obj,那後續在使用中,我們通過具體傳入espressoshortblack等來裝配。

具體裝飾

public class milk extends decorator 

}

public class soy extends decorator

}

//具體的decorator, 這裡就是調味品

public class chocolate extends decorator

}

public class coffeebar 

}

測試結果:

費用1=5.0

描述= longblack

order 加入乙份牛奶 費用 =7.0

order 加入乙份牛奶 描述 = 牛奶 2.0 && longblack

order 加入乙份牛奶 加入乙份巧克力 費用 =10.0

order 加入乙份牛奶 加入乙份巧克力 描述 = 巧克力 3.0 && 牛奶 2.0 && longblack

order 加入乙份牛奶 加入2份巧克力 費用 =13.0

order 加入乙份牛奶 加入2份巧克力 描述 = 巧克力 3.0 && 巧克力 3.0 && 牛奶 2.0 && longblack

*************************==

order2 無因咖啡 費用 =1.0

order2 無因咖啡 描述 = 無因咖啡

order2 無因咖啡 加入乙份牛奶 費用 =3.0

order2 無因咖啡 加入乙份牛奶 描述 = 牛奶 2.0 && 無因咖啡

io流中的裝飾者設計模式

以inputstream為例,

inputstream就是抽象構件(component)角色

filterinputstream就是抽象裝飾角色(decorator),繼承並持有乙個inputstram的引用

剩下兩個角色自己對應,

裝飾者設計模式

裝飾者模式 動態地給乙個物件新增一些額外的職責,就增加功能來說,decorator模式比生成子類更為靈活。讓decorator物件為自己新增功能。有時候使用concretecomponent的派生類提供核心功能,在這種情況就是用concretecomponent替代了component的功能,而且裝...

裝飾者設計模式

package 模式練習部分 首先建立,手機介面,然後建立最基本功能的手機,也就是只有接 功能的手機,然後在這個基礎上在設計乙個裝飾類 開始具體的裝飾過程,按照本例中的步驟,下面要做的就是對於具體裝飾者的建立,先有彩鈴,然後開始接 然後在接完 以後,沒有什麼其他的事情了,開始看會兒電視休息一下。建立...

裝飾者 設計模式

裝飾者 設計模式 1.增強乙個類的 功能,給某個類的 某個方法 增強了,重寫方法 2.讓裝飾類 互相裝飾 實現的步驟 1.在裝飾類的 內部 維護乙個 被裝飾類的 引用 最好是父類的引用 例如 bufferedline 內部維護的 是 bufferedreader類的引用 2.讓裝飾類 有乙個 共同的...