首页 > 其他分享 >代理模式(Proxy)

代理模式(Proxy)

时间:2023-09-07 18:24:04浏览次数:49  
标签:__ buy 对象 代理 模式 Proxy 装饰

代理模式(Proxy)

1、作用

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

2、实现方式

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

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

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

他们主要有三点不同。

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

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

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

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

img

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;
}

输出:
img

标签:__,buy,对象,代理,模式,Proxy,装饰
From: https://www.cnblogs.com/yuandonghua/p/17685762.html

相关文章

  • 策略模式(strategy)
    策略模式(Strategy)1、作用策略模式的主要目的主要是将算法的定义(strategy类)和使用分开(context类),也就是将算法的行为和环境分开,将算法的定义放在专门的策略类中,每一个策略类封装一个实现算法。而使用算法的环境中针对抽象策略编程,而不是针对实现编程,符合依赖倒置原则。2、实现方......
  • 模板模式(template)
    模板模式(Template)1、作用做一件是的方法很多,但做这件都可以归纳为几个步骤。这个时候可以使用模板模式,在模板类中,定义做事的步骤,将多种实现做事的细节延迟到子类中去实现。即:定义一个操作中的算法的骨架(模板函数),而将一些步骤延迟到子类中(基本函数)。模板方法使得子类可以不改变......
  • 外观模式(facade)
    外观模式(Facade)1、作用(1)、将各个子系统的接口汇聚在一起,定义一个统一的接口方便客户使用,满足“迪米特法则”,即客户不需要了解子系统,只需要知道Facade模式封装的类即可以使用所有子系统。(2)、隔离用户和子系统,将用户与子系统解耦,当子系统有修改是,顶多修改Facade模式封装的类,无需......
  • 桥接模式
    桥接模式1作用当类的模型有两个或多个维度的时候,如果两个变化维度用同一个类使用继承方式实现会变得很复杂(冗余代码很多),不易于维护和扩展(继承关系是一种强耦合关系),为了降低耦合关系,提高维护性和可扩展性,可以将两个变化维度的通过两个类(abstruction、implementor类)来实现,将两......
  • Socks5代理IP在网络安全与跨境电商中的应用
    随着全球化的不断推进,跨境电商和在线游戏行业在全球范围内迅速发展。然而,这些领域也面临着日益严峻的网络安全挑战。为了保护数据和确保无缝的国际互联网连接,网络工程师们一直在寻找创新的解决方案。其中,Socks5代理IP技术在这一领域中崭露头角,成为网络安全和跨境电商的强大工具。So......
  • Socks5代理IP在网络安全与跨境电商中的应用
    随着全球化的不断推进,跨境电商和在线游戏行业在全球范围内迅速发展。然而,这些领域也面临着日益严峻的网络安全挑战。为了保护数据和确保无缝的国际互联网连接,网络工程师们一直在寻找创新的解决方案。其中,Socks5代理IP技术在这一领域中崭露头角,成为网络安全和跨境电商的强大工具。So......
  • 代理IP与网络安全:保障跨境电商和游戏的顺畅运行
    在今天的数字时代,跨境电商和在线游戏已经成为全球互联网经济的两个重要组成部分。然而,这两者都需要强大的网络基础设施来支持其运行。同时,网络安全问题也变得愈发突出。在这个背景下,代理IP技术以及特别是Socks5代理协议,成为了网络工程师们重要的工具,以确保跨境电商和在线游戏的顺畅......
  • 代理IP与网络安全:保障跨境电商和游戏的顺畅运行
    在今天的数字时代,跨境电商和在线游戏已经成为全球互联网经济的两个重要组成部分。然而,这两者都需要强大的网络基础设施来支持其运行。同时,网络安全问题也变得愈发突出。在这个背景下,代理IP技术以及特别是Socks5代理协议,成为了网络工程师们重要的工具,以确保跨境电商和在线游戏的顺畅......
  • 韬客时代卷轴模式系统开发介绍和部分核心源码
    韬客时代是一种卷轴模式系统。什么是卷轴模式呢?新用户注册,先送你一部分积分,该积分用于兑换一个初始任务,俗称卷轴!卷轴模式的赚钱的原理是,你用积分兑换初级任务包,完成卷轴任务之后,你可以获得更多的积分,然后复投,达到一定数量后可以兑换更高级的任务包,任务包越高级每次获得的积分也就越......
  • kafka复习:(24)consume-transform-produce模式
    packagecom.cisdi.dsp.modules.metaAnalysis.rest.kafka2023;importorg.apache.kafka.clients.consumer.*;importorg.apache.kafka.clients.producer.KafkaProducer;importorg.apache.kafka.clients.producer.ProducerConfig;importorg.apache.kafka.clients.produc......