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

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

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

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

为什么要使用原型模式

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

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

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

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

比如打印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();

其实就是套了一层壳。

原创文章 84 获赞 7 访问量 5万+

猜你喜欢

转载自blog.csdn.net/Thepatterraining/article/details/105933528