• PHP设计模式之代理模式


    代理模式定义

    为其他对象提供一种代理,以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介作用。

    代理模式使用场景

    • 当需要隐藏一个类的时候;
    • 可以在代理类中做访问委托类的权限管理;
    • 当我们需要对委托类功能做拓展的时候也可以使用代理模式。

    代理模式的优缺点

    优点:

    1. 职责清晰,委托类只需关注自身功能实现,不需要非自身职责;
    2. 代理对象可以在客户端和目标对象之间起到中介作用,保护目标对象;
    3. 可拓展性更强。

    缺点:

    1. 代理类的增加,会使系统文件增加,增加复杂度;
    2. 增加一层代理类,性能会有所损耗;

    代理模式代码实现

    ByHouseInterface.php

    <?php
    
    
    namespace AppStructuralProxy;
    
    
    interface ByHouseInterface
    {
        public function byHouse();
    }
    
    

    TomByHouse.php

    <?php
    
    
    namespace AppStructuralProxy;
    
    
    class TomByHouse implements ByHouseInterface
    {
    
        public function byHouse()
        {
            echo "tom by a house 
    ";
        }
    }
    
    

    ByHousePorxy.php

    <?php
    
    
    namespace AppStructuralProxy;
    
    
    class ByHousePorxy implements ByHouseInterface
    {
    
        protected $customer;
    
        public function __construct(ByHouseInterface $customer)
        {
            $this->customer = $customer;
        }
    
        public function byHouse()
        {
            echo "by house before 
    ";
            $this->customer->byHouse();
            echo "by house after 
    ";
            return 1;
        }
    
    }
    
    

    测试类

    <?php
    
    class ProxyTest extends PHPUnitFrameworkTestCase
    {
        public function testByHouse()
        {
            $proxy = new AppStructuralProxyByHousePorxy(new AppStructuralProxyTomByHouse());
    
            $this->assertEquals(1, $proxy->byHouse());
        }
    }
    
    

    微信扫描二维码,关注我的订阅号,回复 "电子书" 获取各类技术书籍

  • 相关阅读:
    Windows 10 win 10 切换输入法的快捷键
    windows 7输入regedit 打不开注册表
    ios开发之NSData
    ios数组倒序
    iOS NSString使用stringWithFormat的拼接
    BLE 广播格式定义
    低功耗蓝牙UUID三种格式转换
    iOS 如何判断一个点在某个指定区域中
    iOS 毛玻璃效果的实现方法
    iOS毛玻璃效果的实现方法
  • 原文地址:https://www.cnblogs.com/echoou/p/14244143.html
Copyright © 2020-2023  润新知