学习php设计模式 php实现装饰器模式(decorator)
动态的给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活【GOF95】
装饰模式是以对客户透明的方式动态地给一个对象附加上更多的职责。这也就是说,客户端并不会觉得对象在装饰前和装饰后有什么不同。装饰模式可以在不使用创造更多子类的情况下,将对象的功能加以扩展。
一、装饰模式结构图
二、装饰模式中主要角色
抽象构件(Component)角色定义一个对象接口,以规范准备接收附加职责的对象,从而可以给这些对象动态地添加职责。
具体构件(Concrete Component)角色定义一个将要接收附加职责的类。
装饰(Decorator)角色持有一个指向Component对象的指针,并定义一个与Component接口一致的接口。
具体装饰(Concrete Decorator)角色负责给构件对象增加附加的职责。
三、装饰模式的优缺点
装饰模式的优点
1、比静态继承更灵活;
2、避免在层次结构高层的类有太多的特征
装饰模式的缺点
1、使用装饰模式会产生比使用继承关系更多的对象。并且这些对象看上去都很想像,从而使得查错变得困难。
四、装饰模式适用场景
1、在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。
2、处理那些可以撤消的职责,即需要动态的给一个对象添加功能并且这些功能是可以动态的撤消的。
3、当不能彩生成子类的方法进行扩充时。一种情况是,可能有大量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长。另一种情况可能是因为类定义被隐藏,或类定义不能用于生成子类。
五、装饰模式PHP示例
<?php / 抽象构件角色 / interface Component { / 示例方法 / public function operation(); } / 装饰角色 / abstract class Decorator implements Component{ protected $_ponent; public function __construct(Component $ponent) { $this->_ponent = $ponent; } public function operation() { $this->_ponent->operation(); } } / 具体装饰类A / class ConcreteDecoratorA extends Decorator { public function __construct(Component $ponent) { parent::__construct($ponent); } public function operation() { parent::operation(); // 调用装饰类的操作 $this->addedOperationA(); // 新增加的操作 } / 新增加的操作A,即装饰上的功能 / public function addedOperationA() { echo 'Add Operation A <br />'; } } / 具体装饰类B / class ConcreteDecoratorB extends Decorator { public function __construct(Component $ponent) { parent::__construct($ponent); } public function operation() { parent::operation(); $this->addedOperationB(); } / 新增加的操作B,即装饰上的功能 / public function addedOperationB() { echo 'Add Operation B <br />'; } } / 具体构件 / class ConcreteComponent implements Component{ public function operation() { echo 'Concrete Component operation <br />'; } } / 客户端 / class Client { / Main program. / public static function main() { $ponent = new ConcreteComponent(); $decoratorA = new ConcreteDecoratorA($ponent); $decoratorB = new ConcreteDecoratorB($decoratorA); $decoratorA->operation(); $decoratorB->operation(); } } Client::main(); ?>
以上就是使用php实现装饰模式的代码,还有一些关于装饰模式的概念区分,希望对大家的学习有所帮助。
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程