在開發過程中,我們會遇到要將某乙個功能賦予額外的職責,並把這些增加了額外職責的功能按照正確的順序串聯起來進行控制,且可以靈活地調換這些順序,輸出最後執行的結果,裝飾模式就是這樣乙個非常有意思的設計模式。
衣服、鞋子、領帶、披風都可以理解為對人的裝飾。而且可以選擇先穿衣服再穿鞋子,或者先穿鞋子,再穿衣服
動態地給乙個物件新增一些額外的職責,就增加功能來說,裝飾模式比生成子類更為靈活。
person類(concretecomponent)
public
class
person
public
person
(string name)
public
void
show()
}
服飾類(decorator)
public
class
finery
extends
person
@override
public
void
show()
}}
具體服飾類(concretedecorator)
public
class
tshirts
extends
finery
}public
class
bigtrouser
extends
finery
}//其餘類類似,省略
......
....
客戶端
public
class
main
}
執行結果
把類中的裝飾功能從類中搬移去除,這樣可以簡化原有的類
有效地把類的核心職責和裝飾功能區分開了。而且可以去除相關類中重複的裝飾邏輯。
參考資料
[1]: 大話設計模式 程杰著 清華大學出版社
[2]:
大話設計模式之裝飾模式
概念 動態給乙個物件新增額外的職責,就增加功能來說,裝飾模式比生成子類更為靈活。結構圖 解析 component類 定義乙個物件介面,可以給這些物件動態新增職責 方法 concretecomponent類 定義了乙個具體的物件,也可以給這個物件新增職責。decorator類 裝飾抽象類,繼承 com...
大話設計模式之裝飾模式
定義 分離類的職責,讓裝飾和主類分離,好處 利用setcomponent來物件進行包裝,這樣每個裝飾物件的實現就和如何使用這個物件分離開了,每個裝飾物件只關心自己的功能,不需要關心被如何新增到物件鏈中 有效的把類的核心職責和裝飾功能分開了,而且可以去除相關類中複雜的裝飾邏輯。例子 服飾類繼承人類,先...
大話設計模式之裝飾模式總結 java實現
注 示例來自 大話設計模式 現有如下要求 寫乙個可以給人搭配不同的服飾的系統 如下 person類 package test06 public class person public void weartshirts public void wearbigtrouser public void we...