[PHP设计模式]七、装饰器模式

装饰器模式

  1. 装饰器模式,可以动态地添加修改类的功能
  2. 一个类提供了一项功能,如果要在修改并添加额外的功能,传统的编程模式,需要写一个子类继承它,并重新实现类的方法
  3. 使用装饰器模式,仅需在运行时添加一个装饰器对象即可实现,可以实现最大的灵活性。

示例代码:

  1. 声明一个装饰器的接口
<?php
namespace TT;

interface DrawDecorator
{
	function beforeDraw();
	function afterDraw();
}

2.画布

<?php
namespace TT;

class Canvas
{
	protected $decorators;
	function addDecorator(DrawDecorator; $decorator)
	{
		$this->decorators[] = $decorator;
	}
	
	function draw()
	{
		$this->beforeDraw();
		// draw
		$this->afterDraw();
	}
	
	function beforeDraw()
	{
		foreach($this->decorators as $decorator) 
		{
			$decorator->beforeDraw();
		}
	}
	
	function afterDraw()
	{
		// 反转,后进先出
		$decorators  = array_reverse($this->decorators);
		foreach($decorators as $decorator) 
		{
			$decorator->afterDraw();
		}
	}
}
  1. 装饰器实现代码
namespace TT;

class ColorDrawDecorator implements DrawDecorator
{
	protected $color;
	function __construct($color = 'red')
	{
		$this->color = $color;
	}
	
	function beforeDraw()
	{
		echo "<div style='color: {$this->color};'>";
	}
	
	function afterDraw()
	{
		echo "</div>";
	}
}
  1. 调用
<?php
$canvas1 = new TT\Canvas();
$canvas1->init();
$canvas1->addDeCorator(new \TT\ColorDrawDecorator('green'));
$canvas1->rect(2, 6, 4, 12);
$canvas1->draw();

上一页 下一页

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值