裝飾模式:動態地給乙個物件新增一些額外的職責,就增加功能來說,裝飾模式比生成子類更靈活。
就是套娃模式,書中舉了穿衣服的例子,裝配的順序不固定(比如把**穿裡面還是外面(超人和正常人)),但是裝配的細節需要對外隱藏(不闊能光著身子在其他人面前穿衣服吧),出於隱私考慮穿衣服時只能有穿衣服的人和衣服相互作用。
我們來設想乙個場景,有一些肉…然後要料理這塊肉,我們可以先切片,加入調料,再加熱諸如此類的操作,當然如果是個新手可能就出現先加熱再切片然後撒調料這種情況。這就挺符合裝飾模式的。
烹飪介面(或者說決定幹這麼一件事)
inte***ce
cooking_
獲取食材類
class
meat
implements
cooking_
@override
public
void
deal()
}
烹飪方式類:
abstract
class
handle
implements
cooking_
@override
public
void
deal()
}class
cutextends
handle
}class
spices
extends
handle
}class
heating
extends
handle
}
測試類
@test
public
void
test()
這個模式的應用場景是為已有功能新增一些新的措施時的一種方式(比如我們的生牛肉->切片生牛肉->加了調料的切片生牛肉->加了調料的切片熟牛肉)。
雖然裝配順序是可自由組合的,不過有時候還是需要控制順序的(加調料再加熱,肉才入味)。
好處是將類的裝飾功能和核心功能分離開。
壞處是如果某一層裝飾出了問題,定位的時間會有點長,不清楚是具體哪層。
大話設計模式 裝飾模式
動態地給乙個物件新增一些額外的職責。優點 把類中的裝飾功能從類中搬移出去,這樣可以簡化原有的類。有效地把類的核心功能和裝飾功能區分開了。解決的問題 已經開發完畢的物件,後期由於業務需要,對舊的物件需要擴充套件特別多的功能,這時候使用給物件動態地新增新的狀態或者行為 即裝飾模式 方法,而不是使用子類靜...
大話設計模式 裝飾模式
前言穿衣打扮是現在的時尚潮流,我們時常刷 來不斷滿足自己的打扮需求,買個帽子 換條褲子 整雙時尚鞋。需求是沒有極限的,無止境的購物,只要存在這個平台那麼這些裝飾性的購物是不可避免的。這在我們軟體開發中可以看做是為我們例項化的物件新增一些額外的功能,要是我們對於每個都定義個子類來繼承的話,那就是指數增...
大話設計模式 裝飾模式
裝飾模式 動態地給乙個物件新增一些額外的職責,就增加功能來說,裝飾模式比生成子類更為靈活。裝飾模式的uml類圖 component是定義乙個物件介面,可以給這些物件動態的新增職責。concretecomponent是定義了乙個具體的物件,也可以給這個物件新增一些職責。decorator,裝飾抽象類,...