zoukankan      html  css  js  c++  java
  • 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());
        }
    }
    
    

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

  • 相关阅读:
    LeetCode_637.二叉树的层平均值
    LeetCode_627.变更性别
    LeetCode_617.合并二叉树
    LeetCode_595.大的国家
    LeetCode_590.N叉树的后序遍历
    LeetCode_589.N叉树的前序遍历
    LeetCode_58.最后一个单词的长度
    LeetCode_566.重塑矩阵
    LeetCode_561.数组拆分 I
    LeetCode_56.合并区间
  • 原文地址:https://www.cnblogs.com/echoou/p/14244143.html
Copyright © 2011-2022 走看看