装饰器顾名思义就是给一个人带发夹,带首饰打扮打扮。也就是给现有的对象添加新东西,这就引起一个话题,为什么大家不用继承呢?如果要加多个新东西,难道我们每加个东西就要继承前面一个对象,这显然会造成混乱,会使类不断的膨胀。而装饰器模式就避免了这样的问题。说了这么多装饰器模式主要防止类膨胀,他的特点:
1 原始对象对装饰器一无所知。也不知道数量。
2 各个装饰器(也可以说对象)彼此独立,发夹是发夹,首饰是首饰,靴子是靴子,他们之间不与其他装饰器发生冲突。
3 各个装饰器可以随意配对在一起。
4 不需要引入一个包含各种装饰的特性类??????
现在做个例子,有个女孩(componet)要打扮自己,她可以配 发夹(decarator),可以穿 靴子(decarator),可以穿 丝袜(decarator).这个女孩可以随意搭配这些装饰品。
首先 我们定义下 发夹 靴子 丝袜 三个对象装饰品。
下面在定义一个女孩主体。
然后我们实现她。看看女孩长什么样
输出结果
总结
存在一些组件而无法继承它
你希望为他们额外添加行为或者状态,改变该类中某些对象,且没有影响该类其他对象。
而这些行为和状态,你在项目执行时却无法获知。
比较
Decorator 装饰器模式:采用组装整合其他对象来实现,没有使用继承类或者接口实现。
Adapter 适配器模式: 在不同类中通过接口搭接起来。
Composite组合模式:聚集具有接口的对象而无需继承其对象接口。