设计方式学习三:装修者模式
设计模式学习三:装修者模式一.概念???? 动态的给一个对象添加额外的职责。想要扩展功能的话,装饰者提供了一
设计模式学习三:装修者模式
一.概念
???? 动态的给一个对象添加额外的职责。想要扩展功能的话,装饰者提供了一种有别于继承的另外一种选择。
?
二.UML

Component(概念中提到的对象接口),也就是“被装饰者”。ConcreateComponent(未添加任何职责的,对象接口的子类)。Decorator(装饰者抽象类),扩张了对象接口的功能。ConcreteDrcorator(具体装饰类),具体怎么装饰对象接口的在这些类里面反映。
三.实例分析
??? 家里买了一套房子,需要装修,考虑到预算只有这么多,不能采用全包的方式,于是采用将装修工作细化,以节省开销。

???? House
package com.zzy.decorator;/** * 测试类 * @author eason * */public class TestDecorator {public static void main(String[] args) {//空白房子一个House house = new BlankHouse();//一层层装修Decorator dec = new Floorer(new ElectricWirer(new WaterPiper(house)));dec.decorate();}}
?
四.使用场景
为已有组件动态添加更多功能。
五.使用感受
将装饰功能的代码从Component里面提了出来,简化了Component。客户端可以在运行时根据需要,选择需要的功能来包装Component。继承是扩展功能的方式之一,但并不见得是达到弹性设计的最佳形方式。组合和委托可用于在运行时动态地加上新的行为。装饰者模式实际上就是组合和委托。再次提到组合和委托,第一次提到是在策略模式里面。
在日常的设计中,应该允许行为被扩展,而不需修改现有的代码。装修者会导致设计中出现许多小对象,如果过度使用,会让程序变的复杂。
1 楼 zx246212 2012-02-17 看了,有点模糊,感觉用的就是多态么。请问,这还有什么玄机么? 2 楼 zy19982004 2012-02-20 zx246212 写道看了,有点模糊,感觉用的就是多态么。请问,这还有什么玄机么?
装饰者模式本身就有多态的存在,可能是Decorator dec = new Floorer(new ElectricWirer(new WaterPiper(house))); 造成你的有点模糊。但我觉得装饰者模式,重点还是
# public void decorate() {
# super.decorate();
# //自己的逻辑-具体怎么包装的写在super.decorate()的前后任何地方
# }