加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

23种设计模式之装饰模式

发布时间:2020-12-13 20:57:01 所属栏目:百科 来源:网络整理
导读:装饰模式的定义 定义: 动态的给一个对象添加一些额外的职责. 就增加功能来说,装饰模式相比生成子类更为灵活. 通俗的说,就是对一个类或方法进行包装 装饰模式的通用类图: 类图中的四个角色说明如下: Component 抽象构件: Component是一个接口或抽象类,就是定

装饰模式的定义

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

通俗的说,就是对一个类或方法进行包装

装饰模式的通用类图:

23种设计模式之装饰模式

类图中的四个角色说明如下:

  1. Component 抽象构件: Component是一个接口或抽象类,就是定义我们最核心的角色,也就是最原始的对象. 在装饰模式中,必然有一个最基本、最核心的接口或抽象类充当 Component 抽象构件
  2. ConcreteComponent 具体构件: ConcreteComponent 是最核心、最原始、最基本的接口或抽象类的实现,要装饰的就是它
  3. Decorator 装饰角色: 一般是一个抽象类,实现接口或抽象方法,它里面不一定有抽象的方法,在它的属性中必然有一个private变量指向Component抽象构件
  4. 具体装饰类: ConcreateDecrator是具体的装饰类,要把最核心的、最原始的、最基本的东西装饰成其他东西. 当只有一个装饰类时,可以没有抽象装饰角色

具体实现代码如下:

23种设计模式之装饰模式

23种设计模式之装饰模式

抽象装饰者代码:

23种设计模式之装饰模式

具体装饰者代码:

23种设计模式之装饰模式

场景类:

23种设计模式之装饰模式

装饰模式应用

装饰模式的优点:

  1. 装饰类和被装饰类可以独立发展,而不会相互耦合. 也就是说,Component 类无需知道 Decorator 类,Decorator 类是从外部来扩展 Component类的功能,而Decorator也不用知道具体的构件
  2. 装饰模式是继承关系的一个替代方案. 我们看装饰类 Decorator,不管装饰多少层,返回的对象还是 Component.
  3. 装饰模式可以动态的扩展一个实现类的功能

装饰模式的缺点:

对于装饰模式记住一点就够了: 多层的装饰是比较复杂的.

装饰模式的应用场景:

  1. 需要扩展一个类的功能,或给一个类增加附加功能
  2. 需要动态的给一个对象增加功能,这些功能可以再动态的撤销
  3. 需要为一批的兄弟类进行改装或加装功能,当然首选装饰模式

装饰模式是对继承的有力补充. 要知道继承不是万能的,在项目中要考虑诸如易维护、易扩展、易复用等,而且在一些情况下要是用继承就会增加很多子类,而且灵活性非常差,当然维护也不容易了,也就是说装饰模式可以替代继承,解决类膨胀的问题. 同时,继承是静态的给类增加功能,而装饰模式是动态的增加功能.

装饰模式还有一个非常好的优点: 扩展性非常好.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读