Heim > Backend-Entwicklung > PHP-Tutorial > PHP-Entwurfsmuster-Proxy-Muster

PHP-Entwurfsmuster-Proxy-Muster

高洛峰
Freigeben: 2016-11-21 14:41:40
Original
1189 Leute haben es durchsucht

Konzept

Proxy-Muster: ein Objektstrukturmuster. Stellen Sie einen Proxy für ein Objekt bereit. Das Proxy-Objekt steuert den Verweis auf das Originalobjekt.

UML

PHP-Entwurfsmuster-Proxy-Muster

Rolle

Abstrakte Subjektrolle (Subject): Definiert die öffentlichen Schnittstellen RealSubject und Proxy, sodass RealSubject verwendet werden kann überall Proxy kann überall verwendet werden.

Real Subject Role (RealSubject): Definiert die reale Entität, die durch Proxy dargestellt wird.

Proxy-Objekt (Proxy): Speichert eine Referenz, damit der Proxy auf die Entität zugreifen kann, und stellt eine Schnittstelle bereit, die der RealSubject-Schnittstelle entspricht, sodass der Proxy anstelle der Entität (RealSubject) verwendet werden kann.

Anwendbare Szenarien

Je nach Verwendungszweck des Proxy-Modus gibt es gängige Proxy-Modi wie folgt:

Remote-Proxy: ein Proxy, der sich in einem anderen Adressraum befindet Das Objekt stellt ein lokales Proxy-Objekt bereit, das sich auf demselben Host oder einem anderen Host befinden kann. Der Remote-Proxy wird auch Ambassador genannt.

Virtueller Proxy: Wenn Sie ein Objekt erstellen müssen, das große Ressourcen verbraucht, erstellen Sie zunächst ein Objekt, das relativ kleine Ressourcen verbraucht, um es darzustellen. Das reale Objekt wird nur bei Bedarf erstellt.

Copy-on-Write-Agent: Es handelt sich um eine Art virtueller Agent, der den Kopiervorgang (Klonvorgang) verzögert, bis er nur dann ausgeführt wird, wenn der Client ihn wirklich benötigt. Im Allgemeinen ist das tiefe Klonen eines Objekts ein teurer Vorgang. Der Copy-on-Write-Proxy kann diesen Vorgang verzögern und das Objekt wird nur dann geklont, wenn es verwendet wird.

Protect- oder Access-Agent: Steuert den Zugriff auf ein Objekt und kann verschiedenen Benutzern unterschiedliche Ebenen von Nutzungsberechtigungen gewähren.

Cache-Agent: Stellt temporären Speicherplatz für die Ergebnisse eines bestimmten Zielvorgangs bereit, sodass mehrere Clients diese Ergebnisse gemeinsam nutzen können.

Firewall-Proxy: Schützen Sie das Ziel vor böswilligen Benutzern.

Synchronisationsagent: Ermöglicht mehreren Benutzern die gleichzeitige Nutzung eines Objekts ohne Konflikte.

Intelligenter Referenzagent: Wenn auf ein Objekt verwiesen wird, stellt er einige zusätzliche Vorgänge bereit, z. B. die Aufzeichnung der Häufigkeit, mit der dieses Objekt aufgerufen wurde.

Code

Der Code lautet wie folgt:

<?php
header("Content-type:text/html;Charset=utf-8");

/**
 * Interface Subject 抽象主题角色
 *
 * 定义RealSubject和Proxy共同具备的东西
 */
interface Subject
{
    public function say();
    public function run();
}

/**
 * Class RealSubject 真正主题角色
 */
class RealSubject implements Subject
{
    // 姓名
    private $_name;

    /**
     * RealSubject constructor. 构造方法
     *
     * @param $name
     */
    public function __construct($name)
    {
        $this->_name = $name;
    }

    /**
     * 说话
     */
    public function say()
    {
        echo $this->_name."在说话<br>";
    }

    /**
     * 在跑步
     */
    public function run(){
        echo $this->_name."在跑步<br>";
    }
}

/**
 * Class Proxy 代理对象
 */
class Proxy implements Subject
{
    // 真实主题对象
    private $_realSubject = null;

    /**
     * Proxy constructor. 构造方法,依赖注入方式储存真实对象
     *
     * @param RealSubject|null $realSubject
     */
    public function __construct(RealSubject $realSubject = null)
    {
        if (empty($realSubject)) {
            $this->_realSubject = new RealSubject();
        } else {
            $this->_realSubject = $realSubject;
        }
    }

    /**
     * 调用说话方法
     */
    public function say()
    {
        $this->_realSubject->say();
    }

    /**
     * 调用跑步方法
     */
    public function run()
    {
        $this->_realSubject->run();
    }
}

/**
 * Class Client 本地测试
 */
class Client
{
    public static function test()
    {
        // 创建
        $subject = new RealSubject("张三");
        // 代理
        $proxy = new Proxy($subject);
        // 张三在说话
        $proxy->say();
        // 张三在跑步
        $proxy->run();
    }
}

// 测试
Client::test();
Nach dem Login kopieren

Laufergebnis:

Zhang San spricht
Zhang San rennt

Vor- und Nachteile

Vorteile:

Der Proxy-Modus kann den Anrufer und den Angerufenen koordinieren, wodurch die Kopplung des Systems bis zu einem gewissen Grad reduziert wird.

Remote-Proxy ermöglicht dem Client den Zugriff auf Objekte auf dem Remote-Computer. Der Remote-Computer verfügt möglicherweise über eine bessere Rechenleistung und Verarbeitungsgeschwindigkeit und kann Client-Anfragen schnell beantworten und verarbeiten.

Virtuelle Agenten können den Verbrauch von Systemressourcen reduzieren, das System optimieren und die Laufgeschwindigkeit erhöhen, indem sie ein kleines Objekt als Darstellung eines großen Objekts verwenden.

Schutzagenten kontrollieren den Zugriff auf reale Objekte.

Nachteile:

Aufgrund der Hinzufügung eines Proxy-Objekts zwischen dem Client und dem eigentlichen Thema können einige Arten von Proxy-Modi dazu führen, dass die Anfrage langsamer verarbeitet wird.

Die Implementierung von Proxy-Mustern erfordert zusätzliche Arbeit und die Implementierung einiger Proxy-Muster ist sehr komplex.


Verwandte Etiketten:
php
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage