動態地給乙個物件新增一些額外的職責。就增加功能來說,裝飾模式相比生成子類更加靈活
需要透明且動態地擴充套件類的功能時。
/**
* 抽象元件類
*/public abstract class component
/**
* 具體實現類
*/public class concretecomponent extends component
}
/**
* 抽象裝飾者
*/public abstract class decorator extends component
@override
public void operate()
}
public class concretedecorator extends decorator
@override
public void operate()
public void operatea()
}
component:抽象元件。可以是乙個介面或抽象類,其充當的就是被裝飾的原始物件。
concretecomponent:元件具體實現類。該類是component類的基本實現,也是我們裝飾的具體物件。
decorator:抽象裝飾者。其承擔的職責就是為了裝飾我們的元件物件,其內部一定要有乙個指向元件物件的引用。
concretedecoratora:裝飾者具體實現類
下面配一張圖更好去理解上面的東西:
在原始碼當中,context類被稱為「上帝物件」,它本質是乙個抽象類,其在我們裝飾模式裡面就相當於抽象元件,而在其內部定義了大量的抽象方法
public abstract class context
而其真正的實現是在contextimpl中完成的,contextimpl繼承自context抽象類,並實現了context中的抽象方法,具體**如下:
class contextimpl extends context
@override
public void startactivity(intent intent, bundle options)
mmainthread.getinstrumentation().execstartactivity(
(activity) null, intent, -1, options);
}// 省略**
}
context mbase;
mbase = base;
}// 省略**
@override
public void startactivity(intent intent)
// 省略**
}
而其實我們最後的startactivity是由contextimpl來完成的,這種就是典型的裝飾模式的例子。 設計模式 裝飾模式
裝飾模式,動態地給乙個物件新增一些額外的職責,就增加功能來說,裝飾模式比生成子類更為靈活。m 超級瑪麗 普通繼承模式實現 a 發鏢 能組合出七種功能 m1 a m4 a b b 變身 m2 b m5 a c c 無敵 m3 c m6 b c m7 a b m m1 a b 組合方法 new m2 m...
設計模式 裝飾模式
剛看了看設計模式,真是費了好多的腦細胞。想著想著就到了食堂。o o哈!正是長身體的時候 大神勿噴 一定要多吃點。於是我打了乙份公尺飯,然後又端著盛公尺飯的盤子買了乙份菜 看著還不是很夠,就又端著這個盤子買了一條最愛吃的魚。裝飾模式!五一要來了。回家轉轉,沒有小外甥的玩具怎麼行。於是我去超市,推著購物...
設計模式 裝飾模式
複習設計模式 裝飾模式 裝飾模式 在不修改已經存在的類的情況下,動態的新增新的功能,實現即插即用,開放關閉原則 public inte ce man public class batman implements man override public void killmonster public ...