設計模式 裝飾模式(Decorator)

2021-07-13 15:43:46 字數 1481 閱讀 6229

裝飾模式,從裝飾兩個字可以聯想到我們身上的首飾啊衣服什麼的。因此本文就以穿衣服為例子說說裝飾模式。

該例子的難點是用程式把所需要的衣服按照正確的順序串聯起來控制。

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

按照筆者的理解,裝飾模式就是將多個繼承了同乙個父類的物件巢狀起來。然後呼叫的時候按照巢狀的順序乙個個地呼叫這些物件的方法。~

好吧也許看完這句話還不是很了解,沒關係直接上**~~看完**說不定就懂了呢~~

既然本例是以穿衣服為例,那麼就需要乙個人。我們先寫乙個人(person)類,然後有乙個展示衣服的方法show(),人一般都有個名字,給他個name變數,於是人這個類就如下所示:

public  class person 

public person(string name)

public void show()

}

然後需要乙個衣服類:

public class finery extends person 

@override

public void show() }

}

可以看到有乙個decorate的方法,這個方法就是在設定一層一層巢狀的時候使用的。

接下來寫幾個具體衣服的類:tshirts,褲子,拖鞋(不好意思,沒**~~)

tshirts:

public class tshirts extends finery

}

褲子:

public class bigtrouser extends finery

}

拖鞋:

public class slippers extends finery

}

最後在main方法組裝:

public class main 

}

執行結果:

準備衣服....

拖鞋大垮褲

tshirt

小明在穿衣服

好吧萬年不變的小明,不要在意這些細節。我們看看上面的**,是不是真的是多個繼承了同乙個父類(person)的物件互相巢狀,然後第乙個物件的方法,呼叫第二個物件的方法,然後第二個物件又會繼續呼叫第三個物件。。。如此類推像是一條鏈一樣。

上面的例子的裝飾模式是利用decorate方法來對物件進行包裝的。這樣每個裝飾物件的實現就和如何使用這個物件分離開了,每個裝飾物件只關心自己的功能,不需要關心如何被新增到物件鏈當中。

裝飾模式通常用於:為已有的功能動態地新增更多功能的一種方式。當系統需要新的功能時,將新的功能的類包裝舊的類,而無需修改原先的**。當需要的時候,也可以根據需要有選擇地使用裝飾功能包裝物件了。

設計模式 裝飾模式

裝飾模式,動態地給乙個物件新增一些額外的職責,就增加功能來說,裝飾模式比生成子類更為靈活。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 ...