动态的给一个对象添加额外的一些职责,就增加功能而言,比继承更具灵活性.

如果仅有一个ConcreateComponent,也可以让Decorator继承ConcreateComponent来实现装饰功能,尽管这看起来很像适配器.但区别主要是语义上的.

何时使用:
1.为已有对象动态添加更能多功能.
2.新添加的功能不是对象的核心功能.

UML

示例代码:

User类提供了一个获取注册时间的方法,但获取到的时间是一个时间戳,不符合阅读习惯,我们用装饰器装饰,来获取一个较友好的时间表示.

class User
{public function getRegTime(){return time();}
}class Decorator
{protected $user;public function __construct(User $user){$this->user = $user;}public function getTimeForHuman(){return date('Y-m-d H:i:s', $this->user->getRegTime());}
}$user = new User();
$decorator  = new Decorator($user);
echo $decorator->getTimeForHuman();

  

 

转载于:https://www.cnblogs.com/itfenqing/p/7787886.html

S4:装饰模式 Decorator相关推荐

  1. 装饰模式(Decorator)简介

    装饰模式是第三个介绍的模式了. 这个模式没有前面两个那么好理解., 一, 装饰模式(decorator)的定义. 教材里是这样写的: 动态第给1个对象添加1写额外的职责(功能), 就增加的功能来讲, ...

  2. 二十四种设计模式:装饰模式(Decorator Pattern)

    装饰模式(Decorator Pattern) 介绍 动态地给一个对象添加一些额外的职责.就扩展功能而言,它比生成子类方式更为灵活. 示例 有一个Message实体类,某个对象对它的操作有Insert ...

  3. 设计模式(13):结构型-装饰模式(Decorator)

    设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于 ...

  4. 七、装饰模式(Decorator Pattern)

    一.介绍 意图:动态地给一个对象添加一些额外的职责.就增加功能来说,装饰器模式相比生成子类更为灵活. 主要解决:使用继承实现类的功能的扩展,有时子类会过多的问题. 应用实例: 1.一幅照片,将它放入玻 ...

  5. 装饰模式Decorator

                                                               装饰模式Decorator /*** 抽象构件角色* @author InJava ...

  6. 装饰模式(Decorator)

    1.概念 装饰模式动态地给一个对象添加一些额外的职责.就扩展功能而言,它比生成子类方式更为灵活,属于结构性模式一种. 2.模式结构 抽象组件角色(Component):定义一个对象接口,以规范准备接受 ...

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

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

  8. c语言装饰,C++设计模式之装饰模式(Decorator)

    装饰模式是一种经典的类功能扩展模式,其精髓在装饰类使用继承加聚合的方式获得接口和要实现对象,然后通过自己实现扩展接口 作用装饰模式通过装饰类动态地将责任附加到对象上,若要扩展功能,无需通过继承增加子类 ...

  9. 《研磨设计模式》chap22 装饰模式Decorator(4)AOP+总结

    1. AOP面向方面编程 共性功能 AOP调用示意图 public class SaleModel { private String goods; //销售的商品 public String getG ...

最新文章

  1. 一套iOS面试题解答
  2. zabbix 系统搭建(LAMP环境)+keepalived LVS配置
  3. Effective C++ 小笔记:条款13-17(第三章)
  4. 关系代数——附加的关系运算(1)
  5. 只有对经过自己努力才得到的东西,我才会高兴。
  6. 内存条能4+8混插吗?_笔记本内存条双通道提升有多大?实测FORESEE,你知道好处在哪吗...
  7. .net实现批量在线打印_如何实现报表的批量打印需求
  8. CentOS 与 Ubuntu:哪个更适合做服务器?
  9. IntelliJ IDEA 2018 破解 汉化教程地址
  10. keil用c语言编程怎么打开,用keil软件新建,关闭,打开一个完整工程的操作流程...
  11. Diy Win7 OEMlogo
  12. 电子地图(gis应用)开发数据来源分析
  13. Anaconda 安装pkgs
  14. [2022.1.13]UPC-2021级新生个人训练赛第22场-9783 Problem H 铺地砖
  15. java台球游戏设计原理_台球游戏的核心算法和AI(1)
  16. ❤️AI 从入门到精通❤️
  17. 上海世博呈科技盛宴 互动体验未来的衣食住行
  18. 乘积尾零的两种思路与解法
  19. ActiveX 控件“Microsoft Chart Control 6.0(sp4)(OLEDB)不能例示,因为它需要一个设计时间许可
  20. 弹塑性力学复习及整理(思维所致,随时更新)

热门文章

  1. 时间稍纵即逝,好久不见~ [QQ群均已解散,暂只保留UE4群]
  2. 0040-如何重置Cloudera Manager的admin密码
  3. Hyperledger Composer评测
  4. coreutils-5.0中几个命令的执行过程
  5. 基于 Linux Bridge 的 Neutron 多平面网络实现原理
  6. 网速测量、流量监控软件 Bandwidth Meter Pro
  7. NR 5G 非3GPP 接入到核心网络的安全性
  8. 比特币的锁定脚本与解锁脚本
  9. 手撸一个npm包,安利一下duiba-sprite
  10. Android 插件化原理学习 —— Hook 机制之动态代理