码迷,mamicode.com
首页 > Web开发 > 详细

PHP设计模式 五 (代理模式 装饰器模式)

时间:2015-06-21 09:30:42      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:设计模式   php   代理模式   装饰器模式   

代理模式

在客户端和实体之间建立一个代理对象,客户端对实体的操作全部委派给代理对象,隐藏实体具体实现细节。
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");
	}
}



IUserProxy.php:
<?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();
	
}


装饰器1 DecoratorAttr1.php:
<?php

namespace Components\Decorator;

class DecoratorAttr1 implements IDecorator{
	
	function before() {
		echo '<br><div style="color:red">';
	}
	
	function after() {
		echo '</div>';
	}
	
}


装饰器2  DecoratorAttr2.php:
<?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();


PHP设计模式 五 (代理模式 装饰器模式)

标签:设计模式   php   代理模式   装饰器模式   

原文地址:http://blog.csdn.net/fb408487792/article/details/46574711

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!