0
点赞
收藏
分享

微信扫一扫

动态规划--砝码称重

沉浸在自己的世界里 03-17 19:31 阅读 2
代理模式

目录

(一)什么是代理模式

(二)为什么使用代理模式

(三)代理模式实现步奏

(四)代码示例

(五)代理模式优缺点


(一)什么是代理模式

代理模式指代理控制对其他对象的访问,也就是代理对象控制对原对象的引⽤。在某些情况下,⼀个对象不适合或者不能直接被引⽤访问,⽽代理对象可以在客⼾端和⽬标对象之间起到中介的作⽤。


(二)为什么使用代理模式

  1. 增加额外功能:在不修改真实对象代码的前提下,可以通过代理在访问真实对象时添加额外的功能,如缓存、日志记录、延迟加载、性能监测等。

  2. 接口隔离:如果某个对象的接口过于复杂或不希望暴露给客户端,可以使用代理模式提供一个简单的接口进行访问,从而隔离复杂性。

  3. 智能引用:代理可以控制对象的生命周期,实现智能指针的功能,比如引用计数,自动释放不再使用的对象等。

代理模式的作用: AOP实现,拦截器,中介,黄牛,解耦,专人做专事。

  • AOP:面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一 种技术。

(三)代理模式实现步奏

代理模式的实现步骤如下:

  • 提供一个抽象主题角色:真实主题与代理主题的共同接口
  • 提供一个真实主题角色:定义了代理角色所代表的真实对象
  • 提供一个代理主题角色:含有对真实主题角色的引用

【解释说明】

代理模式的结构包括⼀个是真正的你要访问的对象(⽬标类)、⼀个是代理对象。⽬标对象与代理对象实现同⼀个接⼝,先访问代理类再通过代理类访问⽬标对象。代理模式分为静态代理、动态代理:

  • 静态代理指的是,在编译时就已经确定好了代理类和被代理类的关系。也就是说,在编译时就已经确定了代理类要代理的是哪个被代理类。
  • 动态代理指的是,在运⾏时才动态⽣成代理类,并将其与被代理类绑定。这意味着,在运⾏时才能确定代理类要代理的是哪个被代理类。

(四)代码示例

场景

  • 以租房为例,房东将房⼦租出去,但是要租房⼦出去,需要发布招租启⽰,带⼈看房,负责维修,这些⼯作中有些操作并⾮房东能完成,因此房东为了图省事,将房⼦委托给中介进⾏租赁。

代理模式实现:

  •  房东要把⼀个房⼦通过中介租出去理解代理模式
#include <iostream>
#include <string>

class RentHouse {
public:
    virtual void rentHouse() = 0;
};
  • 房东类:将房⼦租出去 
class Landlord : public RentHouse {
public:
    void rentHouse() {
        std::cout << "将房⼦租出去\n";
    }
};
  •  中介代理类:对租房⼦进⾏功能加强,实现租房以外的其他功能
class Intermediary : public RentHouse {
public:
    void rentHouse() {
    std::cout << "发布招租启⽰\n";
    std::cout << "带⼈看房\n";
    _landlord.rentHouse();
    std::cout << "负责租后维修\n";
}
private:
    Landlord _landlord;
};

主函数:

int main()
{
    Intermediary intermediary;
    intermediary.rentHouse();
    return 0;
}

 


(五)代理模式优缺点

优点:

  1. 代理模式可以控制对真实对象的访问,实现权限控制,保护真实对象的安全性。
  2. 高扩展性:具体主题角色可变。

缺点:

  1. 引入代理模式会增加系统的复杂性,在访问真实对象时,代理会增加一层间接调用,可能会导致性能开销。
  2. 如果系统中存在大量的真实对象,可能会导致代理类的数量过多,增加系统的复杂性和维护成本。
举报

相关推荐

B - 砝码称重

砝码称重dp

砝码称重 蓝桥杯

Java POJ 砝码称重

【python】砝码称重 蓝桥杯

砝码称重C/C++

0 条评论