## 一、裝飾模式
動態地給一個對象添加一些額外的職責,就增加功能來說,裝飾模式比生成子類更為靈活。
**裝飾模式的出現**
用例子說明:我們想要表達一個人,穿不同衣服,體現不同個性的一個程序。
首先定義一個人Person類;在定義一個抽象的衣服Clothes類,然后有各種衣服的子類。
在客戶端通過實例化“人”,然后再實例化需要的“衣服”,分別調用show方法。
這樣也可以達到目的,但是我們看分析一下客戶端。
~~~
Person a=new Person("小明");
T恤 t=new T恤();
垮褲 K=new 垮褲();
球鞋 q=new 球鞋();
//顯示
a.show();
t.show();
k.show();
q.show();
~~~
**問題一:**從上述代碼中可以看出這些穿衣服的順序我們可以任意調換,但是一調換,是不是,可能就是另外一種裝扮了,所以這樣寫的代碼結構不穩定。
**問題二:**以上是一種裝扮,如果我要展示N中裝扮呢,我就需要把這些代碼重復N遍。
**為了避免這些問題,所以有了裝飾模式。**
使用裝飾模式可以再客戶端中將裝飾過程進行嵌套封裝,即使同樣的衣服,改變一下順序,就可以穿出兩種風格。而且,穿衣服的件數不一定相同。
同時還減少了代碼的數量,只需要用一個show方法就可以調出嵌套的一系列動作。
**使用裝飾模式:**
需要再衣服類中增加一個Decorate方法,用來給嵌套的要裝飾對象賦值。
代碼顯示:
~~~
Person a=new Person("小明");
T恤 t=new T恤();
垮褲 K=new 垮褲();
球鞋 q=new 球鞋();
//動作嵌套
q.decorate(a);
k.decorate(q);
t.decorate(k);
//顯示
t.show();
~~~
## 二、類圖

- 前言
- 抽象工廠——創建型設計模式一
- 工廠三姐妹——創建型設計模式之二
- 初識面向對象設計模式
- 建造者模式——創建型模式之三
- 原型模式——創建型設計模式四
- 適配器 and 組合模式——結構性模式之一
- 橋接模式——結構性設計模式之二
- 組合模式——結構型設計模式之三
- 裝飾模式——結構型設計模式之四
- 外觀模式——結構型設計模式之五
- 代理模式——結構型設計模式之六
- 觀察者模式——行為型設計模式之五
- 模板設計——行為設計模式之一
- 命令模式——行為設計模式之二
- 狀態模式——行為型設計模式之三
- 職責模式——行為設計模式之四
- 中介模式——行為模式之六
- 策略+簡單工廠 實戰篇
- 看觀察者怎么全方位觀察機房收費系統
- 登陸也需要裝飾——機房收費系統裝飾模式實戰
- 何為抽象?你有本末倒置嗎?
- 再回首,策略、簡單工廠是否依然?
- 再回首——行為型設計模式