设计模式之代理模式--代理转发中间层

设计模式之代理模式–代理转发中间层

代理模式是代理原来的类或对象,在不改变原有类或对象的基础上增加新的功能。

为其他对象提供一种代理以控制对这个对象的访问。

为什么要使用原型模式

代理模式最常用的场景比如我们开发的代理中间层,来代理前端的请求,隐藏真正的后端接口。还有很多远程代理,科学上网也属于代理的一种。

还有虚拟代理,比如浏览器的图片会先出现图片框在加载图片,图片框其实就是一个对图片的代理。

安全代理,用来控制真实对象的访问权限,这个也是代理中间层会做到的。

在我们的代码中一般会使用代理模式做一些原有类做不到的事情,对原有类的扩展。

比如打印sql打印日志发送通知这些跟具体业务无关的功能增加。

这也更加符合开闭原则。通过增加代理类的方式来增加功能而不是修改原来的类。

代理模式要求代理类原类都实现同一个接口,也是对接口实现才能实现用代理类来替换原类。


//代理接口,代理类和原类都需要实现这个接口
interface IProxy{
    public function proxy();
}

//代理类,实现代理接口,代理原类,客户端访问代理类
class proxy implements IProxy {
    private $proxy;

    function __construct(IProxy $proxy) {
        //把要代理的原类传进来
        $this->proxy = $proxy;
    }

    public function proxy() {
        //前置功能
        
        //访问原类
        $this->proxy->proxy();

        //后置功能

    }
}

//原类
class product implements IProxy{
    function proxy() {
        //原类的功能
    }
}

原来没有代理的时候,直接调用原类。


$product = new product();
$product->proxy();

有了代理类之后,客户端调用代理类,隐藏原类。

$proxy = new Proxy(new product());
$proxy->proxy();

其实就是套了一层壳。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值