15_C#设计模式-代理模式

Design Patterns

代理模式

刘 伟 (Sunny)\rweiliu_china@126.com

大纲

\r

代理模式概述\r代理模式的结构与实现\r代理模式的应用实例\r远程代理\r虚拟代理\r缓冲代理\r代理模式的优缺点与适用环境\r

代理模式概述

商品代购示意图

代理模式概述

分析\r代购商品:顾客 ? 代购网站 ? 商品\r软件开发:客户端 ? 代理对象 ? 真实对象

客户端

代理对象

真实对象

代理模式概述

类型

远程代理

保护代理

虚拟代理

缓冲代理

智能引用代理

……

代理模式

代理模式概述

代理模式的定义\r\r\r\r\r对象结构型模式

代理模式概述

代理模式的定义\r引入一个新的代理对象\r代理对象在客户端对象和目标对象之间起到中介的作用\r去掉客户不能看到的内容和服务或者增添客户需要的额外的新服务

代理模式的结构与实现

代理模式的结构\r\r

代理模式的结构与实现

代理模式的结构\r代理模式包含以下3个角色:\rSubject(抽象主题角色)\rProxy(代理主题角色)\rRealSubject(真实主题角色)

代理模式的结构与实现

代理模式的实现\r抽象主题类典型代码:

代理模式的结构与实现

代理模式的实现\r真实主题类典型代码:

代理模式的结构与实现

代理模式的实现\r代理类典型代码:

代理模式的结构与实现

几种常见的代理模式\r远程代理(Remote Proxy):为一个位于不同的地址空间的对象提供一个本地的代理对象,这个不同的地址空间可以在同一台主机中,也可以在另一台主机中,远程代理又称为大使(Ambassador)\r虚拟代理(Virtual Proxy):如果需要创建一个资源消耗较大的对象,先创建一个消耗相对较小的对象来表示,真实对象只在需要时才会被真正创建

代理模式的结构与实现

几种常见的代理模式\r保护代理(Protect Proxy):控制对一个对象的访问,可以给不同的用户提供不同级别的使用权限\r缓冲代理(Cache Proxy):为某一个目标操作的结果提供临时的存储空间,以便多个客户端可以共享这些结果\r智能引用代理(Smart Reference Proxy):当一个对象被引用时,提供一些额外的操作,例如将对象被调用的次数记录下来等

代理模式的应用实例

实例说明

代理模式的应用实例

实例分析及类图

商务信息查询系统设计方案示意图

代理模式的应用实例

实例分析及类图

商务信息查询系统结构图

代理模式的应用实例

实例代码\r(1) AccessValidator:身份验证类,业务类\r(2) Logger:日志记录类,业务类\r(3) Searcher:抽象查询类,充当抽象主题角色\r(4) RealSearcher:具体查询类,充当真实主题角色\r(5) ProxySearcher:代理查询类,充当代理主题角色\r(6) 配置文件App.config\r(7) Program:客户端测试类\r

演示……

参考代码 (DesignPattern\ProxySample)

代理模式的应用实例

结果及分析\r保护代理和智能引用代理\r在代理类ProxySearcher中实现对真实主题类的权限控制和引用计数\r\r\r

远程代理

动机\r客户端程序可以访问在远程主机上的对象,远程主机可能具有更好的计算性能与处理速度,可以快速地响应并处理客户端的请求\r可以将网络的细节隐藏起来,使得客户端不必考虑网络的存在\r客户端完全可以认为被代理的远程业务对象是在本地而不是在远程,而远程代理对象承担了大部分的网络通信工作,并负责对远程业务方法的调用

远程代理

结构

虚拟代理

动机\r对于一些占用系统资源较多或者加载时间较长的对象,可以给这些对象提供一个虚拟代理\r在真实对象创建成功之前虚拟代理扮演真实对象的替身,而当真实对象创建之后,虚拟代理将用户的请求转发给真实对象\r使用一个“虚假”的代理对象来代表真实对象,通过代理对象来间接引用真实对象,可以在一定程度上提高系统的性能

虚拟代理

应用\r由于对象本身的复杂性或者网络等原因导致一个对象需要较长的加载时间,此时可以用一个加载时间相对较短的代理对象来代表真实对象(结合多线程技术)\r一个对象的加载十分耗费系统资源,让那些占用大量内存或处理起来非常复杂的对象推迟到使用它们的时候才创建,而在此之前用一个相对来说占用资源较少的代理对象来代表真实对象,再通过代理对象来引用真实对象(用时间换取空间)

缓冲代理

动机\r为某一个操作的结果提供临时的缓存存储空间,以便在后续使用中能够共享这些结果\r可以避免某些方法的重复执行,优化系统性能\r

缓冲代理

应用\rPetShop 4.0的业务逻辑层(Business Logic Layer, BLL)

PetShop4.0缓存代理示意图

缓冲代理

应用

代理模式的优缺点与适用环境

模式优点\r能够协调调用者和被调用者,在一定程度上降低了系统的耦合度\r客户端可以针对抽象主题角色进行编程,增加和更换代理类无须修改源代码,符合开闭原则,系统具有较好的灵活性和可扩展性

代理模式的优缺点与适用环境

模式优点——逐个分析\r远程代理:可以将一些消耗资源较多的对象和操作移至性能更好的计算机上,提高了系统的整体运行效率\r虚拟代理:通过一个消耗资源较少的对象来代表一个消耗资源较多的对象,可以在一定程度上节省系统的运行开销\r缓冲代理:为某一个操作的结果提供临时的缓存存储空间,以便在后续使用中能够共享这些结果,优化系统性能,缩短执行时间\r保护代理:可以控制对一个对象的访问权限,为不同用户提供不同级别的使用权限

代理模式的优缺点与适用环境

模式缺点\r由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢(例如保护代理)\r实现代理模式需要额外的工作,而且有些代理模式的实现过程较为复杂(例如远程代理)

代理模式的优缺点与适用环境

模式适用环境\r当客户端对象需要访问远程主机中的对象时可以使用远程代理\r当需要用一个消耗资源较少的对象来代表一个消耗资源较多的对象,从而降低系统开销、缩短运行时间时可以使用虚拟代理\r当需要为某一个被频繁访问的操作结果提供一个临时存储空间,以供多个客户端共享访问这些结果时可以使用缓冲代理\r当需要控制对一个对象的访问,为不同用户提供不同级别的访问权限时可以使用保护代理\r当需要为一个对象的访问(引用)提供一些额外的操作时可以使用智能引用代理

END

Thanks!