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

如果仅有一个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();

  

 

最新文章

  1. 一步一步安装UEFI分区方式的windows 10 企业版
  2. Delphi编程获取系统当前进程、窗口句柄、文件属性以(转)
  3. Java for LintCode 验证二叉查找树
  4. NuGet更新引用Dll
  5. 2.精通前端系列技术之seajs和gruntJs结合开发(三)
  6. mysql 语句其它及优化
  7. 1109. Conference(二分图)
  8. android110 jni01
  9. jdbcType与javaType的对应关系
  10. TCP报文中的SYN,FIN,ACK,PSH,RST,URG
  11. C语言:XML学习
  12. 如何将一个div水平垂直居中?4种方法做推荐
  13. os x下如何挂载iso镜像
  14. nim读写注册表的小例子
  15. Kudu之Tablet的发现过程
  16. C#自动识别文件编码
  17. MySQL Workbench导出Model提示['ERROR 1064 (42000): You have an error in your SQL syntax....syntax to use near 'VISIBLE']
  18. bootstrap中的对话框-dialog-2
  19. Java JDBC的基础知识(二)
  20. linux下memcached安装 和redis安装,jdk,tomcat,mysql 安装

热门文章

  1. YUY格式
  2. linux常用60条命令 转
  3. POJ1018 Communication System
  4. 魔法使的烟花(NOIP模拟赛Round 7)
  5. iphone CGBitmapContextCreate()函数解释
  6. (二十二)函数fseek() 用法
  7. 关于 Delphi 中流的使用(1) 用 TMemoryStream(内存流) 入门 &&& 关于指针的迷惑,我自己问的.
  8. 前端面试知识点锦集(JavaScript篇)
  9. Spring:基于配置文件的创建对象的各种方式
  10. King of Karaoke