软件构架模式——代理模式介绍

什么是代理模式?

来张图:

1.代理模式适用于什么场景?

直接访问一个组件通常是不合适的。我们不想将物理地址强制编码到客户机,对组件直接和无限制的访问可能是低效的或者不安全的,所以就需要额外的控制机制。

所以,让客户机通过组件代表访问,而不是通过组件本身,这种中间的代表组件----就称为代理---提供组件的接口并执行附加的前期处理和后期处理。

代理提供了原件相同的接口,而且保证了对原件的正确访问。为完成这种功能,代理保持对它所表示的原件的引用。

2.代理需要实现什么功能:

当客户机执行它的任务时,它要求代理实施一种服务:

·代理接受新来的服务请求并对其进行前期处理。这种前期处理包括诸如查找原件地址这样的操作,或检查本地存储器,以便查看被请求的信息是否已经可以获得。

·如果代理必须参考原件来实现这种请求,那么它会使用合适的通信协议和安全措施将该请求转发到原件。

·原件接受这种请求并实现它。原件将响应发回给代理。

·代理接收响应。将它传送到客户机之前或之后,代理可实施附加的后期处理操作,例如存储结果、调用原件的析构函数或释放一个资源锁。

3.代理模式优点:

1.提高数率和降低成本。虚拟代理变体帮助实现一个“按需装入”的策略。这避免了不必要的磁盘导入并且通常能够加速应用程序。一个类似的观点也应用于缓在代理变体中。然而,很明显,代理的附加开销也许会产生相反的效果,这取决于应用程序。

2.将服务器组件的位置与客户机相分离。将所有本地信息和定位功能放入一个远程住理变体中,客户机不会因为服务器的迁移或者连网基础结构的变动而受到影响。这将使客户机代码变得更加稳定和可重用。但是注意:一个远程代理的简单实现仍然将原件的位置强制连到其代码中。这样做的优点是它通常可以提供更好的运行性能。如果这种灵活性损失是重要的,则可以考虑往代理中引入一个动态查询幽式,正如在签户机一分配器一服务继模式中所描述的那样。

3.将内务处理代码从功能中分离出来。更概括地说,这个优点适用于所有的代理变体、一个代理减轻了客户机的负担,而这些负担本不属于客户机持执行的任务。

代理模式不足:

1.间接方法导致低效率。所有的代理都引入一个间接方法的附加层。效率的损失与客户机的清晰结构和通过缓存或者通过利用代理所取得的惰性构造所增加的效率相比,通常是可以忽路的。虽然如此,还是应该彻底地检查这种对于代理模式的每个应用程序的效率都有的影响。

2.过分采用复条策略。小心像缓存或者按需装入这样的复杂策略—一它们并不总是值得的。这样的例子出现在原件是高度动态时,例如在飞机订票或其他票务预约系统中。这里,由于原件数据的变化,复杂的带有失效机制的缓冲存储可能引人新的开销,这种开销使预定的目的失效。通常,只有粗粒度的实体才能证实所得缓存维护工作是正确的。

原文地址:https://www.cnblogs.com/suifengye/p/9102441.html

时间: 2024-08-29 14:58:25

软件构架模式——代理模式介绍的相关文章

软件设计模式之代理模式(上)

貌似停笔了近半个月了,实在不该啊,新的一年,对自己抱有新的期许,学习不能断,时刻让自己归零. Back To Zero,就从这篇文章拉开今年的序幕吧!! 这篇文章准备分成2部分来写 第一部分介绍下有关代理模式的基本概念和静态代理.动态代理的优缺点及使用方法(包括扩展包CGLIB) 第二部分准备讲下如何自定义的去实现代理,不依赖于JDK给我们提供的代理类 代理模式,又称委托模式,顾名思义委托某物去办某事. 举个生活中的例子,临近大年了,在外地学习工作的小伙伴们也都开始购买回家的火车票,先不说网上订

第14章 结构型模式—代理模式

1. 代理模式(Proxy Pattern)的定义 (1)为其他对象提供一种代理以控制对这个对象的访问 ①代理模式在客户和被客户访问的对象之间,引入了一定程度的间接性,客户是直接使用代理,让代理来与被访问的对象进行交互. ②这种附加的间接性增加了灵活性和不同的用途. (2)代理模式的结构和说明 ①Proxy:代理对象,通常实现与具体的目标对象一样的接口,这样就可以使用代理来代替具体的目标对象. A.保存一个指向具体目标对象的指针,可以在需要的时候调用具体的目标对象,若RealSubject和Su

适配器 蒙面模式 代理模式

这次我把适配器,代理模式,蒙面模式敲了,终于理解了这是怎么回事.C++的设计模式实际上就是软件的功能架构,她想办法处理好类与类之间的关系,让软件好用,易操作,方便修改.软件的所遵循的原则是开闭原则,意思就是开放接口,关闭修改,我们可以去扩展:说到扩展就要提及到这六个字"高内聚,低耦合",我们尽可能的要将功能单一化,一个模块写一个功能,那么我们需要改哪一个功能只需要找到相应就可以,这样做也容易扩展,我增一个功能进来也很easy,举个例子来说吧,假如说一个汽车,我们把汽车可以分为多个模块,

蓝懿IOS委托模式代理模式

今天刘国斌老师讲了有关oc语言里的委托模式(代理模式),通过了一个打地鼠的游戏讲解了委托模式的功能作用,之后连带讲解了协议的书写和使用. 打地鼠功能包括屏幕随机出现地鼠,点击消失,如果不点击5秒后自动消失,屏幕右上角有一个label显示点击的数量:编写思维是,首先在文件里粗昂见一个类,在类里重写init方法,加上每.5秒出现的事件,倒入viewcontroler文件,在地鼠类里声明一个属性delegate,在button点击事件加上创建对象点delegate调用viewcontroler里的加分

Proxy模式 代理模式

Android的 LocalWindowManager 和 WindowManagerImgl 都实现了WindowManager接口.LocalWindowManager 中保存一个WindowManagerImgl的对象,并将这个对象通过构造对象返回. 即将它的工作委托 WindowManagerImgl 来完成.使用了代理模式 1.概述 因为某个对象消耗太多资源,而且你的代码并不是每个逻辑路径都需要此对象, 你曾有过延迟创建对象的想法吗 ( if和else就是不同的两条逻辑路径) ? 你有

13 结构型模式-----代理模式

模式动机(Proxy Pattern):引入一个代理对象负责对真实对象的访问.将代理对象和真实对象的公共接口提取出来,用Subject接口表示.具体结构图及其分析如下: 模式结构图: 模式代码: bt_代理模式.h: 1 #ifndef PP_H 2 #define PP_H 3 #include <iostream> 4 using namespace std; 5 6 /* 7 抽象主题类,定义了RealSubject和Proxy的公共接口,这样就可以在 8 使用RealSubject的地

设计模式之Proxy模式(代理模式)

代理模式很容易理解,就是代替别人去做某一件事,打个比方,我们需要买水果,一般是去超市或者水果店买水果,很少有人去果园买水果,果园是生产水果的地方,但很少出售水果,在这里,水果店,超市就成了代理. 首先定义一个抽象类,提供所有的函数接口. 定义卖水果的抽象类,也就是接口,果园与超市都要继承这个类. #pragma once class CSellFruits//定义一个抽象类 { public: CSellFruits(void); virtual ~CSellFruits(void); virt

软件架构模式--代理模式

代理模式用于在结构化系统中对组件解耦.系统内各组件间采用远过程调用的方式交互.代理(组件充当组件间通讯的协调角色.提供服务的组件将其能力(服务以及特性)发布给代理,客户端均向代理请求服务,由代理将请求重定向到先前已发布过对应服务的组件进行处理. 代理模式在软件架构上具有非常明显的特点,优点与缺点都是十分的突出.代理模式的优点就是通过一个代理对象完成一系列的处理,在将来的程序改动中,就会允许动态更改.添加.删除和重新定位对象,这使开发人员的发布变得透明,符合开闭原则.代理模式能够协调调用者和被调用

java设计模式6——代理模式

java设计模式6--代理模式 1.代理模式介绍: 1.1.为什么要学习代理模式?因为这就是Spring Aop的底层!(SpringAop 和 SpringMvc) 1.2.代理模式的分类: 静态代理 动态代理 1.3.代理模式关系图(以租房子为例) 2.静态代理 2.1.角色分析: 抽象角色:一般会使用接口或者抽象类来解决 真实角色:被代理的角色 代理客户:代理真实角色.代理真实角色后,我们一般会做一些附属的操作 客户:访问代理对象的人 2.2.例1(租房子演示) 2.2.1.抽象角色实现(