Maison  >  Article  >  développement back-end  >  Qu'est-ce que le mode proxy ? (Exemple de description)

Qu'est-ce que le mode proxy ? (Exemple de description)

藏色散人
藏色散人avant
2019-04-16 10:52:244541parcourir

Mode proxy

Le rôle du mode proxy est similaire à l'héritage, aux interfaces et aux combinaisons, qui visent tous deux à agréger les parties communes et à réduire le code de parties communes.

La différence est que par rapport à l'héritage, leurs contextes sont différents. Le sens que l'héritage veut exprimer est est-a, tandis que le sens que le proxy veut exprimer est plus proche de l'interface, qui est a-a. , et si vous utilisez un proxy En réponse à la phrase « utilisez moins l'héritage et utilisez davantage la combinaison », le sens est en fait de réduire le degré de couplage.

Pour la combinaison, c'est plus flexible que la combinaison. Par exemple, si nous définissons l'objet proxy sur privé, alors je peux choisir de fournir seulement une partie de la fonction proxy, comme une ou deux méthodes d'imprimante, et Ou vous pouvez ajouter d'autres opérations lors de la fourniture de fonctions d'imprimante. Elles sont toutes possibles.

<?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();

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer