其他分享
首页 > 其他分享> > 装饰模式(Decorator Pattern)

装饰模式(Decorator Pattern)

作者:互联网

文章目录


装饰模式 动态地给一个对象添加一些 额外的职责,就增加功能来说,装饰模式比生成子类更加灵活

建造者模式和装饰模式的区别

Component是定义一个对象接口,可以给这些对象动态地添加职责,ConcreteComponent是定义了一个具体的对象,也可以给这个对象添加一些职责,Decorator,装饰抽象类,继承了Component从外类来扩展Component类的功能,但对于Component磊说,是无需知道Decorator的存在的,至于ConcreteDecorator就是具体的装饰对象,起到了给Component添加职责的功能

装饰模式是利用setComponent来对对象进行包装的,这样每个装饰对象的实现就和如何使用这个装饰对象分离开来(其实就是多加了一层结构), 每个装饰对象只关心自己的实现,不需要关心如何被添加到对象链当中

装饰模式为已有功能动态地增加更多功能的一种方式

当系统需要新功能的时候,是向旧的类中增加新的代码,这些新加的代码通常修饰了原有类的核心职责或者主要行为,但他们在主类中加入了新的逻辑和新的字段和新的方法,从而增加了主类的复杂性,而这些新加入东西只是为了满足某些特殊场景下的需求,装饰模式提供了一个很好的解决方案,他把每个要装饰的功能放在单独的类中,并让这些类包装他需要装饰的对象,因此在需要执行特殊行为的时候,客户端代码就可以在运行时有选择的加载装饰

装饰模式有效把类中的装饰功能从类中搬移去除,这样可以简化原有的类,有效的把类的核心职责和装饰功能区分开了,去除类中重复的装饰逻辑

但是需要注意的是装饰的顺序

模式动机

一般有两种方式可以实现给一个类或对象增加行为:

继承机制,使用继承机制是给现有类添加功能的一种有效途径,通过继承一个现有类可以使得子类在拥有自身方法的同时还拥有父类的方法。但是这种方法是静态的,用户不能控制增加行为的方式和时机。
关联机制,即将一个类的对象嵌入另一个对象中,由另一个对象来决定是否调用嵌入对象的行为以便扩展自己的行为,我们称这个嵌入的对象为装饰器(Decorator)
装饰模式以对客户透明的方式动态地给一个对象附加上更多的责任,换言之,客户端并不会觉得对象在装饰前和装饰后有什么不同。装饰模式可以在不需要创造更多子类的情况下,将对象的功能加以扩展。这就是装饰模式的模式动机。

模式定义

装饰模式(Decorator Pattern) :动态地给一个对象增加一些额外的职责(Responsibility),就增加对象功能来说,装饰模式比生成子类实现更为灵活。其别名也可以称为包装器(Wrapper),与适配器模式的别名相同,但它们适用于不同的场合。根据翻译的不同,装饰模式也有人称之为“油漆工模式”,它是一种对象结构型模式。

模式结构

角色

模式分析

例子

变形金刚在变形之前是一辆汽车,它可以在陆地上移动。当它变成机器人之后除了能够在陆地上移动之外,还可以说话;如果需要,它还可以变成飞机,除了在陆地上移动还可以在天空中飞翔。

模式优点

模式缺点

适用环境

模式拓展

装饰模式的简化-需要注意的问题:

总结

标签:对象,Pattern,模式,继承,具体,构件,装饰,Decorator
来源: https://blog.csdn.net/Sharker_Blog/article/details/122018107