代理模式--设计模式

简介: 代理模式--设计模式

代理模式


一、动机


1.在面向对象系统中,有些对象由于某种原因(比如对象创建的开销很大,或者某些操作需要安全控制,或者需要进程外的访问等),直接访问会给使用者、或者系统结构带来很多麻烦。


2.如何在不失去透明操作对象的同时来管理/控制这些对象特有的复杂性?增加一层间接层是软件开发中常见的解决方式。


二、介绍


意图: 为其他对象提供一种代理以控制对这个对象的访问。


主要解决: 在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层。


何时使用: 想在访问一个类时做一些控制。


如何解决: 增加中间层。


关键代码: 实现与被代理类组合。


应用实例: 1、Windows 里面的快捷方式。 2、猪八戒去找高翠兰结果是孙悟空变的,可以这样理解:把高翠兰的外貌抽象出来,高翠兰本人和孙悟空都实现了这个接口,猪八戒访问高翠兰的时候看不出来这个是孙悟空,所以说孙悟空是高翠兰代理类。 3、买火车票不一定在火车站买,也可以去代售点。 4、一张支票或银行存单是账户中资金的代理。支票在市场交易中用来代替现金,并提供对签发人账号上资金的控制。


优点: 1、职责清晰。 2、高扩展性。 3、智能化。


缺点: 1、由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。 2、实现代理模式需要额外的工作,有些代理模式的实现非常复杂。


使用场景: 按职责来划分,通常有以下使用场景: 1、远程代理。 2、虚拟代理。 3、Copy-on-Write 代理。 4、保护(Protect or Access)代理。 5、Cache代理。 6、防火墙(Firewall)代理。 7、同步化(Synchronization)代理。 8、智能引用(Smart Reference)代理。


注意事项: 1、和适配器模式的区别:适配器模式主要改变所考虑对象的接口,而代理模式不能改变所代理类的接口。 2、和装饰器模式的区别:装饰器模式为了增强功能,而代理模式是为了加以控制。


三、结构


四、要点总结


1.“增加一层间接层”是软件系统中对许多复杂问题的一种常见解决方法。在面向对象系统中,直接使用某些对象会带来很多问题,作为间接层的proxy对象便是解决这一问题的常用手段。


2.具体proxy设计模式的实现方法、实现粒度都相差很大,有些可熊对单个对象做细粒度的控制,如copy—on—write技术,有些可能对组件模块提供抽象代理层,在架构层次对对象做proxy。


3.Proxy并不一定要求保持接口完整的一致性,只要能够实现间接控制,有时候损及一些透明性是可以接受的。


五、代码展示

class ISubject{
public:
    virtual void process();
};


//Proxy的设计
class SubjectProxy: public ISubject{
    
    
public:
    virtual void process(){
        //对RealSubject的一种间接访问
        //....
    }
};

class ClientApp{
    
    ISubject* subject;
    
public:
    
    ClientApp(){
        subject=new SubjectProxy();
    }
    
    void DoTask(){
        //...
        subject->process();
        
        //....
    }
};
目录
相关文章
|
19天前
|
设计模式 JavaScript Java
设计模式——代理模式
一文讲清楚设计模式中的代理模式
28 0
设计模式——代理模式
|
19天前
|
设计模式 uml
设计模式之代理模式
设计模式之代理模式
|
19天前
|
设计模式 Arthas Java
【设计模式】代理模式
【设计模式】代理模式
|
19天前
|
设计模式 缓存 前端开发
【设计模式】之代理模式
代理模式是一种常用的设计模式,它通过创建一个代理对象来控制对另一个对象的访问。通过使用代理模式,可以实现对目标对象的访问控制、增加额外功能、解耦客户端与目标对象等。然而,需要根据具体情况权衡使用代理模式所带来的优缺点。
46 0
|
19天前
|
设计模式
代理模式--设计模式
代理模式--设计模式
11 0
|
19天前
|
设计模式 缓存 安全
设计模式之代理模式(1)
设计模式之代理模式(1)
|
8月前
|
设计模式 安全 C++
设计模式之代理模式(C++)
设计模式之代理模式(C++)
|
设计模式 消息中间件 存储
一起来学设计模式之代理模式
前言 目前正在出一个设计模式专题系列教程, 篇幅会较多, 喜欢的话,给个关注❤️ ~ 本节给大家讲一下设计模式中的代理模式,并结合实际业务场景给大家讲解如何使用~ 本专题的所有案例代码主要以Java语言为主, 好了, 废话不多说直接开整吧~ 代理模式 代理模式是一种常见的设计模式,它为其他对象提供了一种代理以控制对这个对象的访问。 在代理模式中,我们定义了一个代理类,代理类持有一个真正执行业务逻辑的对象的引用,客户端调用代理对象的方法时,实际上是在调用真正对象的方法,代理对象可以在调用真正对象的方法前后进行一些处理,如记录日志、缓存结果、权限校验等。
|
设计模式 Arthas 监控
《设计模式》代理模式
《设计模式》代理模式
《设计模式》代理模式
|
设计模式 网络安全
23种设计模式——代理模式
代理模式就是给一个对象提供一个代理,并由代理对象控制对原对象的引用。
85 0
23种设计模式——代理模式