注:示例來自《大話設計模式》
現有如下要求 寫乙個可以給人搭配不同的服飾的系統 **如下
person類
package test06;
public
class person
public
void
weartshirts()
public
void
wearbigtrouser()
public
void
wearsneakers()
public
void
wearsuit()
public
void
weartie()
public
void
wearleathershoes()
public
void
show()
}
客戶端**
package test06;
public
class program
}
現在有個問題就是如果需要增加超人的裝扮 該如何做呢
需要改person類 違背了開放-封閉原則 應該把服飾都寫成子類
重構後**如下
person類
package test06;
public
class person
public
void
show()
}
服飾抽象類
package test06;
public
abstract
class finery
各種服飾子類
package test06;
public
class
tshirts
extends
finery
}
package test06;
public
class
bigtrouser
extends
finery
}
package test06;
public
class
sneakers
extends
finery
}
package test06;
public
class
suit
extends
finery
}
package test06;
public
class
tieextends
finery
}
package test06;
public
class
leathershoes
extends
finery
}
客戶端**
package test06;
public
class program
}
上面的**是乙個詞乙個詞顯示出來的 就好比 光著身子 當著大家的面 先穿 t恤 再穿褲子 再穿鞋 應該把所需的功能按正確的順序串聯起來進行控制 用裝飾模式看看如何實現 **如下
person類
package test06;
public
class person
private string name;
public
person(string name)
public
void
show()
}
服飾類
package test06;
public
class
finery
extends
person
@override
public
void
show()
}}
具體服飾類
package test06;
public
class
tshirts
extends
finery
}
package test06;
public
class
bigtrouser
extends
finery
}
package test06;
public
class
sneakers
extends
finery
}
package test06;
public
class
suit
extends
finery
}
package test06;
public
class
tieextends
finery
}
package test06;
public
class
leathershoes
extends
finery
}
客戶端**
package test06;
public
class program
}
裝飾模式是為已有功能動態地新增更多功能的一種方式 它把每個要裝飾的功能放在單獨的類中 並讓這個類包裝它所要裝飾的物件 可以在執行時 根據需要有選擇地 按順序地使用裝飾功能包裝物件
缺點:會產生過多的相似的物件 不容易排錯
大話設計模式之裝飾模式(Java總結)
在開發過程中,我們會遇到要將某乙個功能賦予額外的職責,並把這些增加了額外職責的功能按照正確的順序串聯起來進行控制,且可以靈活地調換這些順序,輸出最後執行的結果,裝飾模式就是這樣乙個非常有意思的設計模式。衣服 鞋子 領帶 披風都可以理解為對人的裝飾。而且可以選擇先穿衣服再穿鞋子,或者先穿鞋子,再穿衣服...
大話設計模式之裝飾模式
概念 動態給乙個物件新增額外的職責,就增加功能來說,裝飾模式比生成子類更為靈活。結構圖 解析 component類 定義乙個物件介面,可以給這些物件動態新增職責 方法 concretecomponent類 定義了乙個具體的物件,也可以給這個物件新增職責。decorator類 裝飾抽象類,繼承 com...
大話設計模式之裝飾模式
定義 分離類的職責,讓裝飾和主類分離,好處 利用setcomponent來物件進行包裝,這樣每個裝飾物件的實現就和如何使用這個物件分離開了,每個裝飾物件只關心自己的功能,不需要關心被如何新增到物件鏈中 有效的把類的核心職責和裝飾功能分開了,而且可以去除相關類中複雜的裝飾邏輯。例子 服飾類繼承人類,先...