裝飾設計模式

2021-09-03 08:18:59 字數 1629 閱讀 9219

動態地給乙個物件新增一些額外的職責。就增加功能來說,裝飾模式相比生成子類更加靈活

需要透明且動態地擴充套件類的功能時。

/**

* 抽象元件類

*/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 ...