PHP设计模式笔记九:装饰器模式 -- Rango韩老师 http://www.imooc.com/learn/236

时间:2023-03-08 17:01:21
PHP设计模式笔记九:装饰器模式 -- Rango韩老师 http://www.imooc.com/learn/236

装饰器模式(Decorator)

  概述

  1、装饰器模式可以动态地添加修改类的功能

  2、一个类提供了一项功能,如果要在修改并添加额外的功能,传统的编程模式,需要写一个子类继承它,并重新实现类的方法

  3、使用装饰者模式,仅需在运行时添加一个装饰器对象即可实现,可以实现最大的灵活性

  

  代码实现如下

    使用原型模式中的Canvas类,如果当前想设置draw()方法画图的颜色为红色,传统的方式实现如下:

    PHP设计模式笔记九:装饰器模式 -- Rango韩老师 http://www.imooc.com/learn/236

    定义一个子类,重写draw()方法,从而实现特定的功能;如果需要增加很多功能呢?就会遇到问题:

    

    使用装饰者模式实现如下:

    Canvas.php代码如下:

    PHP设计模式笔记九:装饰器模式 -- Rango韩老师 http://www.imooc.com/learn/236

    PHP设计模式笔记九:装饰器模式 -- Rango韩老师 http://www.imooc.com/learn/236

    定义一个接口,用来规范装饰者DrawDecorator

    PHP设计模式笔记九:装饰器模式 -- Rango韩老师 http://www.imooc.com/learn/236

    定义两个装饰类,分别修改颜色和修改字体大小

      ColorDrawDecorator.php

    PHP设计模式笔记九:装饰器模式 -- Rango韩老师 http://www.imooc.com/learn/236

      SizeDrawDecorator.php

    PHP设计模式笔记九:装饰器模式 -- Rango韩老师 http://www.imooc.com/learn/236

    在入口文件出实例化Canvas,增加两个装饰者,进行绘图,代码如下:

    PHP设计模式笔记九:装饰器模式 -- Rango韩老师 http://www.imooc.com/learn/236

    从而达到装饰的目的

    PHP设计模式笔记九:装饰器模式 -- Rango韩老师 http://www.imooc.com/learn/236