Karp 的技术博客

概述

代理模式是一种结构型设计模式,它允许通过创建一个代理对象来控制对其他对象的访问。代理对象充当了客户端和实际对象之间的中介,可以在访问实际对象之前或之后添加额外的逻辑。

适用场景

代理模式适用于以下情况:

  • 当你想要在访问一个对象时添加额外的逻辑,而不改变原始对象的代码。
  • 当你需要对原始对象进行访问控制,例如权限验证、缓存等。
  • 当你希望延迟实例化一个对象,直到真正需要它的时候。

结构

代理模式由以下组件组成:

  • 抽象主题(Abstract Subject):抽象主题定义了代理对象和真实对象的共同接口。
  • 真实主题(Real Subject):真实主题是实际执行操作的对象。
  • 代理(Proxy):代理对象实现了抽象主题接口,并在执行操作时调用真实主题对象。代理对象可以在调用真实主题对象之前或之后添加额外的逻辑。

示例

<?php

// 抽象主题
interface Subject
{
    public function request();
}

// 真实主题
class RealSubject implements Subject
{
    public function request()
    {
        echo "真实主题处理请求。" . PHP_EOL;
    }
}

// 代理
class Proxy implements Subject
{
    private $realSubject;

    public function request()
    {
        if (!$this->realSubject) {
            $this->realSubject = new RealSubject();
        }

        $this->beforeRequest();
        $this->realSubject->request();
        $this->afterRequest();
    }

    private function beforeRequest()
    {
        echo "代理对象处理请求之前的操作。" . PHP_EOL;
    }

    private function afterRequest()
    {
        echo "代理对象处理请求之后的操作。" . PHP_EOL;
    }
}

// 客户端代码
$proxy = new Proxy();
$proxy->request();

在上面的示例中,我们给出了一个代理模式的示例实现。其中,抽象主题(Subject)定义了代理对象和真实对象的共同接口。真实主题(RealSubject)是实际执行操作的对象。代理(Proxy)对象实现了抽象主题接口,并在执行操作时调用真实主题对象。代理对象在调用真实主题对象之前和之后可以添加额外的逻辑。

通过使用代理模式,我们可以在不修改真实主题对象的情况下,对其进行访问控制、延迟实例化或添加额外的逻辑。代理模式提供了一种灵活的方式来管理对象的访问,并增强了系统的可维护性和扩展性。

php 设计模式

版权属于:karp
作品采用:本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
更新于: 2015年12月28日 12:11
4

目录

来自 《PHP设计模式:代理模式》