装饰模式 Decorator

Intro

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

装饰模式又被称为装饰器模式或装饰者模式

使用场景

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

当系统需要新功能的时候,是向旧的类中添加新的代码,这些新加的代码通常装饰了原有类的核心职责或主要行为,但是往往会在主类中加入新的字段/方法/逻辑,从而增加了主类的复杂度, 而这些新加入的东西仅仅是为了满足一些只在某种特定情况下才会执行的特殊行为的需要

装饰模式提供了一个很好的方案,它把每个要装饰的功能放在单独的类中,并让这个类包装它要装饰的对象, 当需要执行特殊行为时,就可以在运行时根据需要有选择地、按顺序地使用装饰功能包装对象了。

装饰模式的优点是把类中的装饰功能从类中搬移去除,这样可以简化原有的类,这样做就有效地把类的核心职责和装饰功能区分开了,而且可以去除相关类中重复的装饰逻辑。

Prototype

  • Component 定义一个对象的抽象,可以给这些对象动态的添加职责

  • ConcreteComponent 定义一个具体的对象,也可以给这个对象添加一些职责

  • Decorator 装饰抽象类,继承了 Component,从外类来扩展 Component 类的功能,但对于 Component 来说是无需知道 Decorator 的存在的

  • ConcreteDecorator 具体的装饰对象,起到给 Component 添加职责的功能

internal abstract class Component
{public abstract void Operation();
}
internal class ConcreteComponent : Component
{public override void Operation(){Console.WriteLine("Operation executed in ConcreteComponent");}
}internal abstract class Decorator : Component
{protected Component Component;public void SetComponent(Component component){Component = component;}public override void Operation(){Component?.Operation();}
}
internal class DecoratorA : Decorator
{private string _state;public override void Operation(){base.Operation();_state = "executed";Console.WriteLine($"operation in DecoratorA, state:{_state}");}
}
internal class DecoratorB : Decorator
{public override void Operation(){base.Operation();Console.WriteLine("operation in DecoratorB");AddBehavior();}private void AddBehavior(){Console.WriteLine("another behavior");}
}

More

装饰器模式主要解决继承关系过于复杂的问题,通过组合来替代继承。它主要的作用是给原始类添加增强功能。这也是判断是否该用装饰器模式的一个重要的依据。

Reference

  • https://github.com/WeihanLi/DesignPatterns/tree/master/StructurePattern/DecoratorPattern

​设计模式之装饰模式相关推荐

  1. 设计模式之装饰模式20170726

    结构型设计模式之装饰模式: 一.含义 动态地给一个对象添加一些额外的职责.就增加功能来说,装饰模式相比生成子类更为灵活. 通俗来讲,装饰模式是对类的功能进行加强或减弱. 二.代码说明 1.主要有两个角 ...

  2. java设计模式之装饰模式_Java中的装饰器设计模式

    java设计模式之装饰模式 装饰器设计模式允许在运行时将附加职责或行为动态附加到对象. 它是一种结构模式,利用聚合来组合这些行为. 在本教程中,我们将学习实现装饰器模式. UML图: 让我们从装饰器模 ...

  3. 大话设计模式之装饰模式(python实现)

    大话设计模式之装饰模式 使用场景 定义 装饰模式结构图 python实现装饰模式 代码结构图 优点 使用场景 建造过程不稳定,不确定.把所需的功能按照正确的顺序串联起来进行控制. 新加入的东西仅仅是为 ...

  4. 设计模式之装饰模式详解(附应用举例实现)

    文章目录 1 装饰模式介绍 2 装饰模式详解 2.1 装饰模式结构 2.2 装饰模式实现 2.3 装饰模式应用举例 3 透明装饰模式和半透明装饰模式 1 装饰模式介绍 在生活中,我们往往会给图片增加一 ...

  5. 设计模式之 装饰模式

    设计模式之 装饰模式 概述: 装饰模式(Decorator Pattern) 又叫装饰者模式:装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也 ...

  6. 设计模式之装饰模式(Decorator)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

  7. 设计模式之三 装饰模式

    1.场景模拟 这样让想起了老李,我跟老李是很要好的哥们,当然他不像我还是光棍,所以他不光有友情还有爱情了,不过,就在最近几天他们吵架啦,什么原因?就不多说啦,总之身为男人的老李还是决定主动认错挽回女方 ...

  8. 大话设计模式之装饰模式

    装饰模式 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 通过下列代码加深下理解 ...

  9. (C#)设计模式之装饰模式

    1.装饰模式 动态的给一个对象添加一些额外的职责,就添加功能来说,装饰模式比生成子类更加灵活.*装饰模式是为已有功能动态添加更多功能的一种方式.*装饰模式将原有类中的核心职责与装饰功能分离.简化了原有 ...

  10. JAVA设计模式之装饰模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述装饰(Decorator)模式的: 装饰模式又名包装(Wrapper)模式.装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替 ...

最新文章

  1. 介绍如何用 Python 来绘制高清的交互式地图,建议收藏
  2. mysql binlog的查询
  3. python免费试听-哈尔滨Python人工智能课程免费试听
  4. 配置ftp服务器亲测可用
  5. web前端技巧-ES6新特性与重点知识汇总(一)
  6. Kafka解析之topic创建(2)
  7. R3 data related to category and hierarchy mapping logic in CRM
  8. 打开pjsip2.1版本的视频支持
  9. 用ISA阻挡用户向论坛发贴子
  10. The NVIDIA driver on your system is too old (found version 10000). Please update your GPU driver by
  11. 网页读不出php语句,php - phpmyadmin显示代码而不是网页 - 堆栈内存溢出
  12. 软件测试基础:自动化测试、安全测试、性能测试
  13. thymeleaf的初次使用(带参请求以及调用带参js方法)
  14. Android模拟器SDL_app:emulator.exe 解决方法
  15. 使用SQL语句操作数据
  16. djang常用查询SQL语句
  17. 如何取消html中页眉的下划线,怎么取消页眉页脚的横线_怎样取消页眉上的横线-win7之家...
  18. linux无法访问移动硬盘,移动硬盘“无法访问”的解决方案
  19. Activiti学习之根据条件判断流程走向
  20. 基于tkinter制作的一个策略小游戏

热门文章

  1. Spread / Rest 操作符
  2. Eclipse启动时布局不合理调整
  3. Java 关于中文乱码处理的经验总结
  4. linux显示fio为非法指令,FORTRAN运行错误消息列表中英对照.doc
  5. 2019年5月 Teams Community Call (China)
  6. 视频造假_如何发现“深造假”面部切换视频
  7. cmd暂停快捷键_是否有键盘快捷键可以暂停正在运行的CMD窗口的输出?
  8. JS时间戳和时间互转
  9. Linux性能优化2.1 CPU性能统计信息
  10. MFC Attach()函数和Detach()函数