• 代理模式(Proxy)


    1、作用

    代理模式是包装一个对象,控制对它的访问,实现逻辑合实现的解耦。

    2、实现方式

    代理模式跟装饰器模式、适配器模式、外观模式都有类似的地方,都通过关联关系封装了其他类型的对象,但是使用的目的不一样。

    代理:包装一个对象,控制对它的访问。
    装饰者:包装另一个对象,并提供额外的行为。
    适配器:包装另一个对象,并提供不同的接口。
    外观:包装许多对象,以简化他们的接口。

    代理模式和装饰器模式最为相似

                (1)、UML图基本一样,共同的基类提供统一的接口,然后分出两部分子类,被封装类(被装饰类,被代理类)的和封装类(装饰器类、代理类),这两个类是关联关系。

    他们主要有三点不同。

               (1)、目的不一样:代理模式关注与被代理对象行为的控制,然而装饰模式关注于在一个对象上动态的添加方法。

               (2)、对象绑定时刻不一样:代理模式中,代理类中默认封装了一个被代理的对象,例化代理类的时候不需要通过构造函数传递被代理对象,代理和被代理对象是在代理类中固定绑定。而装饰器模式中装饰器类例化的时候需要传递一个被装饰的对象,装饰对象与装饰器由用户绑定。

               (3)、对应数量不一样:代理类和被代理的对象一般是一一对应,而装饰器类和被装饰对象一般是多对一,这样导致装饰器类会中间定义一个装饰器基类,专门封装被装饰对象。

    下面以买房代理为例子,对应的UML图为如下:

    3、C++代码

    BuyHouseProxy.h

    #include <iostream>
    
    #ifndef __BUY_HOUSE_PROXY__H__
    #define __BUY_HOUSE_PROXY__H__
    
    using namespace std;
    
    class Buy {
        virtual void buy(int price) = 0;
    };
    
    class BuyHouse : public Buy {
        public:
            void buy(int price) { cout<<"buy house is success! price is "<<price<<endl; }
    };
    
    class BuyHouseProxy : public Buy {
        public:
            void buy(int price) {
                if(price >= 10)                         // 控制被代理对象
                    buyHouse.buy(price);
                else
                    cout<<"price is to low !" <<endl;
            }
        private:
            BuyHouse buyHouse;
    };
    
    
    #endif

    test.cc

    #include "BuyHouseProxy.h"
    
    int main() {
        BuyHouseProxy buyHouseProxy;
        buyHouseProxy.buy(9);
        buyHouseProxy.buy(10);
    
        return 0;
    }

    输出:

  • 相关阅读:
    Install Failed Insufficient Storage, 解决 ADB 安装APK失败问题
    finding-the-smallest-circle-that-encompasses-other-circles
    PyTorch for Semantic Segmentation
    Semantic-Segmentation-DL
    Awesome Semantic Segmentation
    应用于语义分割问题的深度学习技术综述
    JS打开浏览器
    Overcoming iOS HTML5 audio limitations
    Android APP Testing Tutorial with Automation Framework
    基于方向包围盒投影转换的轮廓线拼接算法
  • 原文地址:https://www.cnblogs.com/yuandonghua/p/11890610.html
Copyright © 2020-2023  润新知