裝飾者模式指的是在不必改變原類檔案和使用繼承的情況下,動態地擴充套件乙個物件的功能。它是通過建立乙個包裝物件,也就是裝飾來包裹真實的物件。
用來表示大概是這樣:
(取自:
舉個粟子:
假設我們是一間奶茶店的老闆,有牛奶,綠茶,果汁三種飲品,三種飲品才可以自由新增白糖、椰果、珍珠。
例如:雙倍白糖梛果牛奶
我們可以利用裝飾者模式者模式來完成這種需求。
首先,我們給所有的奶茶設計乙個父類(被裝飾者),所有飲品都繼承於它
public
abstract
class
drink
//飲料的**
public
abstract
double
cost();
}//接著,我們設計乙個裝飾者類,它繼承於drink類,且它為所有新增料的父類
public
abstract
class
decorator
extends
drink
有了上面兩個類之後,我們可以設計飲品類和加料類了
//牛奶類
public
class
milk
extends
drink
public
double
cost()
}//果汁類
public
class
juice
extends
drink
public
double
cost()
}//綠茶類
public
class
greentea
extends
drink
public
double
cost()
}
接下來就是加料類
//白醣類
public
class
sugar
extends
decorator
public string getdescription()
//用被裝飾者的**再加上自己的**
public
double
cost()
}//珍珠類
public
class
bubble
extends
decorator
@override
public string getdescription()
@override
public
double
cost()
}//梛果類
public
class
coconut
extends
decorator
@override
public string getdescription()
@override
public
double
cost()
}
最後,我們就可以進行測試啦! 我們來弄一杯雙倍白糖梛果牛奶試試。
public
class drinkshop
}
執行結果如下:
成功執行。
使用這種模式的優點:
1. 裝飾者模式與繼承關係的目的都是要擴充套件物件的功能,但是裝飾者模式可以提供比繼承更多的靈活性。
2. 通過使用不同的具體裝飾類以及這些裝飾類的排列組合,設計師可以創造出很多不同行為的組合。
設計模式 裝飾者模式
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 角色 定義乙個將要接收附...