代理模式
在客户端和实体之间建立一个代理对象,客户端对实体的操作全部委派给代理对象,隐藏实体具体实现细节。
Proxy还可以与业务代码分离,部署到另外的服务器,业务代码中通过RPC来委派任务。
代理Proxy.php:
<?php
namespace Components\Proxy;
class Proxy implements IUserProxy {
	
	function get($id) {
		$db = \Components\Register::get('slave');
		$db->query('select name from users where id ='.$id);
	}
	
	function set($id, $name) {
		$db = \Components\Register::get('master');
		$db->query("update users set name=$name where id =$id");
	}
}<?php
namespace Components\Proxy;
interface IUserProxy {
	
	function get();
	
	function set();
}/* 代理模式  适用于类似主从 */
$proxy = new Proxy();
$proxy->get('1');
$proxy->set('1', 'php');
装饰器模式
在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。
装饰器接口IDecorator.php:
<?php
namespace Components\Decorator;
/**
 * 装饰器模式  接口
 * @author WH
 *
 */
interface IDecorator {
	
	function before();
	
	function after();
	
}<?php
namespace Components\Decorator;
class DecoratorAttr1 implements IDecorator{
	
	function before() {
		echo '<br><div style="color:red">';
	}
	
	function after() {
		echo '</div>';
	}
	
}<?php
namespace Components\Decorator;
class DecoratorAttr2 implements IDecorator{
	
	function before() {
		echo '<br><div style="font-size:30px">';
	}
	
	function after() {
		echo '</div>';
	}
	
}/* 装饰器模式 原类 */
class DecoratorClassTest {
	protected $decorators = array();
	
	//添加装饰器
	function addDecorator(\Components\Decorator\IDecorator $decorator) {
		$this->decorators[] = $decorator;//添加装饰器
	}
	
	function before(){
		foreach ($this->decorators as $decorator) {
			$decorator->before();//调用装饰器
		}
	}
	
	function after(){
		//这里可用栈
		$decorators = array_reverse($this->decorators);
		foreach ($decorators as $decorator) {
			$decorator->after();//结束装饰器
		}
	}
	
	function test() {
		$this->before();
		echo 'running<be>';
		$this->after();
		
	}
}$decoratorTest = new DecoratorClassTest(); $decoratorTest->addDecorator(new \Components\Decorator\DecoratorAttr1()); $decoratorTest->addDecorator(new \Components\Decorator\DecoratorAttr2()); $decoratorTest->test();
原文地址:http://blog.csdn.net/fb408487792/article/details/46574711