以此需求為例:去飯店點乙份麵條,滷可以有多種搭配
現有如下麵條種類,要求可以將任意麵條的名列印到控制台。
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 ...