設計模式 裝飾者模式

2021-10-02 08:51:42 字數 2188 閱讀 5276

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

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

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

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

我們可以乙個給每一種咖啡建立乙個類;如下圖所示;

當然,這樣設計需要有很多類,當我們新增乙個單品咖啡,或者乙個新的調料時,類的數量就會倍增,出現類**;(顯然這種方法是最笨的,當然也有更好的方式)

裝飾者模式下的類設計

drink是乙個抽象類,被coffee繼承;

decorator也是乙個抽象類,它也繼承drink,是裝飾者物件;而coffee是被裝飾者;

將coffee的父類聚合drink聚合到decorator中;

drink抽象類

@data

public abstract class drink

coffee類

public class coffee  extends drink 

}

shortblack類,具體實現類

public class shortblack extends coffee

}

decaf類,無因咖啡,具體實現類

public class decaf extends coffee 

}

espresso類,義大利咖啡,具體實現類

public class espresso extends coffee 

}

longblack類,

public class longblack extends coffee 

}

decorator類,裝飾者類

public class decorator extends drink 

@override

public float cost()

@override

public string getdes()

}

chocolate類,裝飾者具體實現類

public class chocolate extends decorator 

}

milk類,裝飾者具體實現類

public class milk extends decorator 

}

soy類,裝飾者具體實現類

public class soy extends decorator

}

測試類

public class coffeebar 

}

[外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳(img-uxvxeqch-1579827816233)(en-resource://database/1838:1)]

datainputstream dis = new datainputstream(new fileinputstream("d:\\abc.txt"));

inputstream 是抽象類, 類似前面講的drink;

fileinputstream 是 inputstream 子類,類似我們前面的 decaf, longblack;

filterinputstream 是 inputstream 子類:類似我們前面 的 decorator 修飾者;

datainputstream 是 filterinputstream 子類,具體的修飾者,類似前面的 milk, soy 等;

filterinputstream類有protected volatile inputstream in; 即含被裝飾者。

設計模式 裝飾者模式

public abstract class beverage public abstract double cost public abstract class condimentdecorator extends beverage public class darkroast extends be...

設計模式 裝飾者模式

沒什麼特別的,之前看懂了,這次自己再複述一下。畢竟把別人講懂了才是真的懂了。主要參考了head first 設計模式。例子講述的是在為星巴克咖啡的製作訂單的情況,比如客人點了飲料,那麼系統會自動算出 不知道是我沒有體會到,還是這個例子不太合適,算出 那麼簡單的事還需要用到類?不過不影響我們思考裝飾者...

設計模式 裝飾者模式

好幾天沒出部落格了,在學習android的一些新控制項的時候,用到了乙個模式,叫裝飾者模式,所以在此講講這個模式。模式,包含以下四個角色 1 抽象構件 component 角色 給出乙個抽象介面,以規範準備接收附加責任的物件。2 具體構件 concretecomponent 角色 定義乙個將要接收附...