裝飾設計模式

2021-07-29 19:59:19 字數 1212 閱讀 4683

以此需求為例:去飯店點乙份麵條,滷可以有多種搭配

現有如下麵條種類,要求可以將任意麵條的名列印到控制台。

1、麵條

2、魚丸面

3、牛肉麵

4、青菜面

5、魚丸牛肉麵

6、魚丸青菜面

7、牛肉青菜面

8、魚丸牛肉青菜面

不用裝飾者模式:

如果想讓任意一種面的名字列印在控制台,就需要一種面對應乙個類,一共幾種面,就需要建立幾個類,每個類中有

乙個eat()的方法在eat(),方法中system.out.println("每種面的名字"),然後通過建立類物件,呼叫eat方法,來實現效果。

問題:如果麵條的種類更多的話,

就需要再建立更多的類,相當麻煩。

解決:使用裝飾設計模式

通過使用裝飾者模式,則可以在這幾種麵中抽取乙個介面,只需寫出幾個要素類,通過要素類間的相互搭配,就可以得到這幾種面。

public class test 

}inte***ce food

//定義麵條類

class noodles implements food

}//定義魚丸麵類

class fishballnoodles implements food

@override

public void eat()

}//定義牛肉麵

class beefnoodles implements food

@override

public void eat()

}//定義青菜面

class greensnoodles implements food

@override

public void eat()

}

總結:

裝飾設計要點

:1.抽取介面,例如本例中都有eat方法,可以把eat方法放到乙個介面中,讓下面的類都實現該介面並重寫eat方法。

2.建立要素類,例如本例中有  麵條、魚丸面、牛肉麵、青菜面 這四種是基本的類,通過這幾個基本的類間的相互搭配實現其他種類的面。

3.要素類之間要進行組合   (組合的同時就是對eat()方法的強化)。

優點:可以實現更豐富的組合效果,避免了類**。

缺點:組合太隨意,容易出現不符合業務邏輯的組合方式 例如本例中相互任意搭配可能出現 魚丸魚丸青菜面(誰家麵館也沒這樣叫啊)。

設計模式 裝飾模式

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