若转载教程,请注明出自SW-X框架官方文档!
<?php/*** 设计模式之代理器模式* 我的理解:对对象进行了控制* 小黄牛*/header("Content-type: text/html; charset=utf-8");/*** 接口 - 鞋*/interface ShoesInterface{public function product();}/*** 创建 - 运动鞋模型*/class ShoesSport implements ShoesInterface{public function product(){echo "生产一双球鞋<br/>";}}/*** 代理器*/class Proxy{private $_shoes; // 鞋的模型对象private $_shoesType; // 生产哪种鞋子public function __construct($shoesType){$this->_shoesType = $shoesType;}/*** 生产.*/public function product(){switch ($this->_shoesType) {case 'sport':echo "我可以偷工减料";$this->_shoes = new ShoesSport();break;default:throw new Exception("类型不正确", 404);break;}$this->_shoes->product();}}echo "未加代理之前:<br/>";# 生产运动鞋$shoesSport = new ShoesSport();$shoesSport->product();echo "加代理:<br/>";# 把运动鞋产品线外包给代工厂$proxy = new Proxy('sport');# 代工厂生产运动鞋$proxy->product();
浏览器输出
未加代理之前:生产一双球鞋加代理:我可以偷工减料生产一双球鞋
代理器模式
抽象主题角色(IGiveGift):定义了Follower和Proxy公用接口,这样就在任何使用Follower的地方都可以使用Proxy。主题角色(Follower):定义了Proxy所代表的真实实体。代理对象(Proxy):保存一个引用使得代理可以访问实体,并提供一个与Follower接口相同的接口,这样代理可以用来代替实体(Follower)。
三者之间的区别
代理器:对对象加以【控制接口】适配器的区别:适配器是连接两个接口(【改变接口】)装饰器的区别:装饰器是对现有的对象包装(【接口的功能扩展】)
