裝飾者模式及其簡單例項

2021-08-14 17:37:10 字數 1988 閱讀 3316

咖啡店裡咖啡中可以加不同的配料–摩卡、牛奶、糖、奶泡;不同的飲品加上不同的配料有不同的價錢,怎樣實現呢?

可能你的第一印象會想到使用繼承, 

1. 首先定義乙個咖啡基類 

2. 對於加糖的,加牛奶的,加摩卡的 ,加奶泡的,分別寫乙個子類繼承 

3. 對於加糖,又加奶的寫乙個類,對於對於加糖,又摩卡的寫乙個類,對於對於加糖、又奶泡的寫乙個類,對於加糖,又加奶、摩卡的寫乙個類—- 

說到這裡,你會發現這裡四種配料就要寫十幾種實現類了,那如果我們的配料是二十幾種或者三十幾種呢,那麼使用繼承這種 方式肯定會使我們的子類**,那要怎樣解決你,答案就是使用裝飾者模式

我覺得裝飾者模式是在已有功能的基礎之上,動態地新增更多 功能的一種方式,這些新加的**裝飾了原有類的 核心職責或主要行為。

* @ explain:這裡coffee相當於我們的component,

* 是要裝飾的類

* * @ author:xujun on 2016/7/10 23:16

* @ email:[email protected]

*/public

abstract

class

coffee

/**

* @ explain:

* @ author:xujun on 2016/7/10 23:21

* @ email:[email protected]

*/public

abstract

class

decorator

extends

coffee

}

public

class

milkdecorator

extends

decorator

@override

public

intgetprice()

@override

public string getname()

}

其實核心**就下面一行,在原來的**加上 加牛奶的**

return mcoffee.getprice()+10
return mcoffee.getprice()+2;

return mcoffee.getprice()+15;

return mcoffee.getprice()+20;

以後你想要計算加糖,就牛奶,加奶泡的咖啡的**,只需要這樣

mcoffee = new ******coffee();

mcoffee = new sugardecorator(mcoffee);

mcoffee = new milkdecorator(mcoffee);

mcoffee = new milkfoamdecorator(mcoffee);

int price1 = mcoffee.getprice();

system.out.println("price1="+price1);

以後你想要計算加糖,就牛奶咖啡的**,只需要這樣

mcoffee = new ******coffee();

mcoffee = new sugardecorator(mcoffee);

mcoffee = new milkdecorator(mcoffee);

int price1 = mcoffee.getprice();

system.out.println("price1="+price1);

簡單的裝飾者模式

裝飾者模式主要用來擴充套件功能的,不會改變原來物件的功能,只做擴充套件 版本一 如下 public abstract class beefnoodlepublic class basebeefnoodle extends beefnoodle public int getprice public c...

裝飾者模式簡單理解

裝飾者模式簡單理解 1.定義 增強乙個類的功能,還可以讓裝飾者類之間互相裝飾 2.步驟 1 裝飾者類中需要維護乙個被裝飾者類的引用 2 讓裝飾者類有乙個共同的父類,或者父介面 eq 例項 裝飾者類與繼承的區別 繼承實現的增強類 優點 結構清晰,而且實現簡單 缺點 對於每乙個的需要增強的類都要建立具體...

裝飾者模式簡單示例 一

例項參考於 headfirst設計模式 public abstract class beverage cost必須在子類中實現 public abstract double cost public abstract class condimentdecorator extends beverage ...