若转载教程,请注明出自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)。
三者之间的区别
代理器:对对象加以【控制接口】
适配器的区别:适配器是连接两个接口(【改变接口】)
装饰器的区别:装饰器是对现有的对象包装(【接口的功能扩展】)
免费教程手写不易,希望能支持一下SW-X框架,(^.^)
GitHub有账号的朋友,也可以给我们一个小星星噢!
希望能够与大家共同培育出良好的Swoole生态,对Swoole有兴趣的朋友可以加我微信好友,进入SW-X框架官方交流群。
该群以Swoole生态发展交流为主,若出现争吵,攻击其他人等行为,立即剔除。
该群以Swoole生态发展交流为主,若出现争吵,攻击其他人等行为,立即剔除。
