设计模式 之 装饰器模式

动态添加修改类的功能,传统一个类提供了一项功能,如果要修改并添加额外的功能,需要重新写一个类继承他,重新实现类的方法
使用适配器模式,紧需要在运行时添加一个装饰器对象即可,可实现最大灵活性
通过一个画图示例来演示:
想画一个图片,有人想这个图有点小,变大点吧!
   有人想 这个图是黑白的,彩色的比较好看,下面就是一个实现!然后对装饰结果做出评价!

<?php
namespace zhuangshiqi;
class Draw{
	private $decorators = array();
	
	function addDectorators(Decorator $deco){
		$this->decorators[]=$deco;
	}

	function draw(){
		$this->beforeDraw();
		echo "i am ready draw a pic!\n";
		$this->afterDraw();
	}

	function beforeDraw(){
		foreach($this->decorators as $deco){
			$deco->beforeDraw();
		}
	}

	function afterDraw(){
		foreach($this->decorators as $deco){
			$deco->afterDraw();
		}
	}

}

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

class BigDeco implements Decorator{
	function beforeDraw(){
		echo "the pic is more big!\n";
	}
	function afterDraw(){
		echo "i is sastify!\n";
	}
}

class ColorDeco implements Decorator{
	function beforeDraw(){
		echo "the pic more colors\n";
	}
	function afterDraw(){
		echo "i is sastify!\n";
	}
}

$draw = new Draw();
$draw->addDectorators(new ColorDeco());
$draw->addDectorators(new BigDeco());

$draw->draw();


?>


运行结果:

设计模式 之 装饰器模式_第1张图片


你可能感兴趣的:(设计模式,装饰器模式,之)