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

代理模式用于在结构化系统中对组件解耦。系统内各组件间采用远过程调用的方式交互。代理(组件充当组件间通讯的协调角色。提供服务的组件将其能力(服务以及特性)发布给代理,客户端均向代理请求服务,由代理将请求重定向到先前已发布过对应服务的组件进行处理。

  代理模式在软件架构上具有非常明显的特点,优点与缺点都是十分的突出。代理模式的优点就是通过一个代理对象完成一系列的处理,在将来的程序改动中,就会允许动态更改、添加、删除和重新定位对象,这使开发人员的发布变得透明,符合开闭原则。代理模式能够协调调用者和被调用者,在一定程度上降低了系统的耦合度。远程代理使得客户端可以访问在远程机器上的对象,远程机器可能具有更好的计算机性能与处理速度,可以快速响应并处理客户端请求。代理模式在架构中还可以让虚拟代理通过使用一个小对象来代表一个大对象,可以减少系统资源的消耗,对系统进行优化并提高运行速度。
  另外代理模式的缺点也是很突出的,要求对服务描述进行标准化,我们要使用代理模式时则需要考虑异步处理机制、协议创建流程和错误环境控制,比较的繁琐。由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。实现代理模式需要额外的工作,有些代理模式的实现非常复杂。这些问题就造成了不易开发的弱点。

  代理模式是通过引入代理对象来间接访问一个对象,代理模式可以在客户端和目标对象中起到一个中介的作用,并且可以通过代理对象去掉客户不能看到的内容和服务或者添加客户需要的额外服务。

  代理模式在java框架中也有应用,例如spring中AOP技术就是代理模式的应用,只不过是应用较为高级的动态代理模式。另外EJB、Web Service等分布式技术都是代理模式的应用。其实在设计模式中也有代理模式,这就需要分别以下两者的区别,设计模式是架构的手段(之一)。软件架构 :一般场景下拥有设计的选择权;设计模式 :选择后特定场景下的最佳实践,两者的范围还是有很大的差别的,另外我认为如果把做一个项目当成一场战争的话,那么架构就是这场战争的总元帅,而设计模式只是执行命令的一位将军。

  总的来说代理模式作为软件架构模式的常用模式,应用的范围还是十分的广泛:

  (1) 当客户端对象需要访问远程主机中的对象时可以使用远程代理。

   (2) 当需要用一个消耗资源较少的对象来代表一个消耗资源较多的对象,从而降低系统开销、缩短运行时间时可以使用虚拟代理,例如一个对象需要很长时间才能完成加载时。

  (3) 当需要为某一个被频繁访问的操作结果提供一个临时存储空间,以供多个客户端共享访问这些结果时可以使用缓冲代理。通过使用缓冲代理,系统无须在客户端每一次访问时都重新执行操作,只需直接从临时缓冲区获取操作结果即可。

  (4) 当需要控制对一个对象的访问,为不同用户提供不同级别的访问权限时可以使用保护代理。

  (5) 当需要为一个对象的访问(引用)提供一些额外的操作时可以使用智能引用代理。

  所以我们如果要进行软件架构使用代理模式去应用特定的场景,一定要选择正确的方法,会让我们的架构使得项目变得更加简单。

原文地址:https://www.cnblogs.com/kangzhijia/p/9068454.html

时间: 2024-08-02 21:52:07

软件架构模式--代理模式的相关文章

蓝懿IOS委托模式代理模式

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

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

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

Proxy模式 代理模式

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

适配器 蒙面模式 代理模式

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

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

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

什么是代理模式? 来张图: 1.代理模式适用于什么场景? 直接访问一个组件通常是不合适的.我们不想将物理地址强制编码到客户机,对组件直接和无限制的访问可能是低效的或者不安全的,所以就需要额外的控制机制. 所以,让客户机通过组件代表访问,而不是通过组件本身,这种中间的代表组件----就称为代理---提供组件的接口并执行附加的前期处理和后期处理. 代理提供了原件相同的接口,而且保证了对原件的正确访问.为完成这种功能,代理保持对它所表示的原件的引用. 2.代理需要实现什么功能: 当客户机执行它的任务时

代理模式(Proxy Pattern)

一.概述在软件开发中,有些对象由于创建成本高.访问时需要与其它进程交互等原因,直接访问会造成系统速度慢.复杂度增大等问题.这时可以使用代理模式,给系统增加一层间接层,通过间接层访问对象,从而达到隐藏系统复杂性.提高系统性能的目的.二.代理模式代理模式为其他对象提供一种代理以控制对这个对象的访问.其结构图如下: Subject定义了RealSubject和Proxy共用的接口,使得在任何使用RealSubject的地方都可以使用Proxy abstract class Subject { publ

Android设计模式之代理模式 Proxy

一.概述 代理模式也是平时比较常用的设计模式之一,代理模式其实就是提供了一个新的对象,实现了对真实对象的操作,或成为真实对象的替身.在日常生活中也是很常见的.例如A要租房,为了省麻烦A会去找中介,中介会替代A去筛选房子,A坐享中介筛选的结果,并且交房租也是交给中介,这就是一个典型的日常生活中代理模式的应用.平时打开网页,最先开到的一般都是文字,而图片等一些大的资源都会延迟加载,这里也是使用了代理模式. 代理模式的组成: Abstract Subject:抽象主题-声明真实主题和代理主题共同的接口