Heim  >  Artikel  >  Backend-Entwicklung  >  Was ist der Proxy-Modus? (Beispielbeschreibung)

Was ist der Proxy-Modus? (Beispielbeschreibung)

藏色散人
藏色散人nach vorne
2019-04-16 10:52:244587Durchsuche

Proxy-Modus

Die Rolle des Proxy-Modus ähnelt der von Vererbung, Schnittstelle und Kombination. Beide dienen dazu, gemeinsame Teile zu aggregieren und den Code zu reduzieren gemeinsame Teile.

Der Unterschied besteht darin, dass ihre Kontexte im Vergleich zur Vererbung unterschiedlich sind. Die Bedeutung, die die Vererbung ausdrücken möchte, ist „is-a“, während die Bedeutung, die der Proxy ausdrücken möchte, näher an der Schnittstelle liegt, die „has-a“ ist , und wenn Sie einen Proxy verwenden Als Antwort auf den Satz „Verwenden Sie weniger Vererbung und mehr Kombinationen“ besteht die Bedeutung tatsächlich darin, den Kopplungsgrad zu verringern.

Für die Kombination ist es flexibler als für die Kombination. Wenn wir beispielsweise das Proxy-Objekt auf privat setzen, kann ich wählen, nur einen Teil der Proxy-Funktion bereitzustellen, z. B. eine oder zwei Methoden zum Drucken. und Oder Sie können einige andere Vorgänge hinzufügen, wenn Sie Druckerfunktionen bereitstellen. Diese sind alle möglich.

<?php
//代理对象,一台打印机
class Printer { 
    public function printSth() {
        echo &#39;我可以打印<br>&#39;;
    }
}
//这是一个文印处理店,只文印,卖纸,不照相
class TextShop {
    private $printer;
    public function __construct(Printer $printer) {
        $this->printer = $printer;
    }
    //卖纸
    public function sellPaper() {
        echo &#39;give you some paper <br>&#39;;
    }
    //将代理对象有的功能交给代理对象处理
    public function __call($method, $args) {
        if(method_exists($this->printer, $method)) {
            $this->printer->$method($args);
        }
    }
}
//这是一个照相店,只文印,拍照,不卖纸
class PhotoShop {    
    private $printer;
    
    public function __construct(Printer $printer) {
        $this->printer = $printer;
    }
    
    public function takePhotos() {    //照相
        echo &#39;take photos for you <br>&#39;;
    }
    
    public function __call($method, $args) {    //将代理对象有的功能交给代理对象处理
        if(method_exists($this->printer, $method)) {
            $this->printer->$method($args);
        }
    }
}
$printer = new Printer();
$textShop = new TextShop($printer);
$photoShop = new PhotoShop($printer);
$textShop->printSth();
$photoShop->printSth();

Das obige ist der detaillierte Inhalt vonWas ist der Proxy-Modus? (Beispielbeschreibung). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:hcoder.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen