一:背景:Decorator
*Decorator 常被翻譯成"裝飾",我覺得翻譯成"油漆工"更形象點,油漆工(decorator)是用來刷油漆的,那麼被刷油漆的對象我們稱decoratee.這兩種實體在Decorator 模式中是必須的。
*Decorator 定義:
動態給一個對象添加一些額外的職責,就象在牆上刷油漆.使用Decorator 模式相比用生成子類方式達到功能的擴充顯得更為靈活。
*為什麼使用Decorator?
我們通常可以使用繼續來實現功能的拓展,假如這些需要拓展的功能的種類很繁多,那麼勢必生成很多子類,增加系統的復雜性,同時,使用繼續實現功能拓展,我們必須可預見這些拓展功能,這些功能是編譯時就確定了,是靜態的。
使用Decorator 的理由是:這些功能需要由用戶動態決定加入的方式和時機.Decorator 提供了"即插即用"的方法,在運行期間決定何時增加何種功能。
*對於該模式,初步歸納為
1.基本功能為接口
2.Decorator參數為接口本身也為接口以便為下一個Decorator的參數
3.基本功能類實現接口 並作為Decorator構造函數的參數,以便在此基礎上添加新功能
4.額外功能由Decorator中的數據結構處理
二:問題
這是一段Decorator設計模式的實現例子如下:
基本功能:Counter類
需要添加的功能
1:上限控制
2:下限控制
import java.io.*;
class Counter{
private int value;
public Counter(int v){
System.out.println("init me here in The Counter with value!");
value=v;
}
public Counter(Counter cc){
System.out.println("init me here in The Counter with class!");
value=cc.value;
}
public int read_value(){
System.out.println("read me here The value is:"+value);
System.out.println("read me here in The Counter!");
return value;
}
public void increment(){
System.out.println("increment me here in The Counter !");
value++;
}
public void decrement(){
System.out.println("decrement me here in The Counter !");
value--;
}
}
class Decorator extends Counter
{
Counter counter;
public Decorator(Counter c)
{
super(c);
System.out.println("init me here with class Decorator!");