S4:装饰模式 Decorator
动态的给一个对象添加额外的一些职责,就增加功能而言,比继承更具灵活性.
如果仅有一个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相关推荐
- 装饰模式(Decorator)简介
装饰模式是第三个介绍的模式了. 这个模式没有前面两个那么好理解., 一, 装饰模式(decorator)的定义. 教材里是这样写的: 动态第给1个对象添加1写额外的职责(功能), 就增加的功能来讲, ...
- 二十四种设计模式:装饰模式(Decorator Pattern)
装饰模式(Decorator Pattern) 介绍 动态地给一个对象添加一些额外的职责.就扩展功能而言,它比生成子类方式更为灵活. 示例 有一个Message实体类,某个对象对它的操作有Insert ...
- 设计模式(13):结构型-装饰模式(Decorator)
设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于 ...
- 七、装饰模式(Decorator Pattern)
一.介绍 意图:动态地给一个对象添加一些额外的职责.就增加功能来说,装饰器模式相比生成子类更为灵活. 主要解决:使用继承实现类的功能的扩展,有时子类会过多的问题. 应用实例: 1.一幅照片,将它放入玻 ...
- 装饰模式Decorator
装饰模式Decorator /*** 抽象构件角色* @author InJava ...
- 装饰模式(Decorator)
1.概念 装饰模式动态地给一个对象添加一些额外的职责.就扩展功能而言,它比生成子类方式更为灵活,属于结构性模式一种. 2.模式结构 抽象组件角色(Component):定义一个对象接口,以规范准备接受 ...
- 设计模式之装饰模式(Decorator)摘录
23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...
- c语言装饰,C++设计模式之装饰模式(Decorator)
装饰模式是一种经典的类功能扩展模式,其精髓在装饰类使用继承加聚合的方式获得接口和要实现对象,然后通过自己实现扩展接口 作用装饰模式通过装饰类动态地将责任附加到对象上,若要扩展功能,无需通过继承增加子类 ...
- 《研磨设计模式》chap22 装饰模式Decorator(4)AOP+总结
1. AOP面向方面编程 共性功能 AOP调用示意图 public class SaleModel { private String goods; //销售的商品 public String getG ...
最新文章
- 一套iOS面试题解答
- zabbix 系统搭建(LAMP环境)+keepalived LVS配置
- Effective C++ 小笔记:条款13-17(第三章)
- 关系代数——附加的关系运算(1)
- 只有对经过自己努力才得到的东西,我才会高兴。
- 内存条能4+8混插吗?_笔记本内存条双通道提升有多大?实测FORESEE,你知道好处在哪吗...
- .net实现批量在线打印_如何实现报表的批量打印需求
- CentOS 与 Ubuntu:哪个更适合做服务器?
- IntelliJ IDEA 2018 破解 汉化教程地址
- keil用c语言编程怎么打开,用keil软件新建,关闭,打开一个完整工程的操作流程...
- Diy Win7 OEMlogo
- 电子地图(gis应用)开发数据来源分析
- Anaconda 安装pkgs
- [2022.1.13]UPC-2021级新生个人训练赛第22场-9783 Problem H 铺地砖
- java台球游戏设计原理_台球游戏的核心算法和AI(1)
- ❤️AI 从入门到精通❤️
- 上海世博呈科技盛宴 互动体验未来的衣食住行
- 乘积尾零的两种思路与解法
- ActiveX 控件“Microsoft Chart Control 6.0(sp4)(OLEDB)不能例示,因为它需要一个设计时间许可
- 弹塑性力学复习及整理(思维所致,随时更新)
热门文章
- 时间稍纵即逝,好久不见~ [QQ群均已解散,暂只保留UE4群]
- 0040-如何重置Cloudera Manager的admin密码
- Hyperledger Composer评测
- coreutils-5.0中几个命令的执行过程
- 基于 Linux Bridge 的 Neutron 多平面网络实现原理
- 网速测量、流量监控软件 Bandwidth Meter Pro
- NR 5G 非3GPP 接入到核心网络的安全性
- 比特币的锁定脚本与解锁脚本
- 手撸一个npm包,安利一下duiba-sprite
- Android 插件化原理学习 —— Hook 机制之动态代理