代理模式
Proxy代理模式是一种结构型设计模式,主要解决的问题是:在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层。如下图:
比如说C和A不在一个服务器上,A要频繁的调用C,我们可以在A上做一个代理类Proxy,把访问C的工作交给Proxy,这样对于A来说,就好像在直接访问C的对象。在对A的开发中我们可以把注意力完全放在业务的实现上。
GoF《设计模式》中说道:为其他对象提供一种代理以控制这个对象的访问。
Proxy模式的结构:
通过代理模式以客户透明的形式动态的为目标对象加以行为控制
实例
class BankAccount def deposit p "store the money" end end class Proxy attr_accessor :bankAccount def initialize bankAccount @bankAccount = bankAccount end def deposit @bankAccount.deposit end end
创建银行账户类,再创建代理类,代理类聚合银行账户类,提供相同的行为结构,对客户来说代理类就是一个伪账户类,对代理类做操作的时候,其实就是在对真实的银行类做操作。
加以行为控制:
class Proxy attr_accessor :bankAccount def initialize bankAccount @bankAccount = bankAccount end def deposit check_something @bankAccount.deposit end def check_something #do some checking code end end
这样我们就可以在对调用目标对象的同时增加控制代码,但是这一切都是以透明的方式展示给客户,对客户来说就跟调用普通的BankAccount对象方法一样
bankAccount = BankAccount.new bankAccount.deposit proxy = Proxy.new bankAccount proxy.deposit
Proxy模式的要点:
1、“增加一层间接层”是软件系统中对许多负责问题的一种常见解决方法。在面向对象系统中,直接使用某些对象会带来很多问题,作为间接层的proxy对象便是解决这一问题的常用手段。
在我们日常的工作中也常常用到代理模式,比如对于三层结构或者N- tiers结构中DAL数据访问层,它把对数据库的访问进行封装。BLL业务层的开发者只是调用DAL中的方法来获得数据。
再比如前一段时间看了看AOP和Remoting方面的资料,对于跨越应用程序域的访问,要为客户应用程序提供一个TransparentProxy(透明代理),客户程序实际上是通过访问这个代理来访问实际的类型对象。
2、具体proxy设计模式的实现方法、实现粒度都相差很大,有些可能对单个对象作细粒度的控制,有些可能对组件模块提供抽象代理层,在架构层次对对象作proxy。
3、proxy并不一定要求保持接口的一致性,只要能够实现间接控制,有时候损及一些透明性是可以接受的。例如上面的那个例子,代理类型ProxyClass和被代理类型LongDistanceClass可以不用继承自同一个接口,正像GoF《设计模式》中说的:为其他对象提供一种代理以控制这个对象的访问。代理类型从某种角度上讲也可以起到控制被代理类型的访问的作用。
本文向大家介绍实例解析Ruby设计模式开发中对观察者模式的实现,包括了实例解析Ruby设计模式开发中对观察者模式的实现的使用技巧和注意事项,需要的朋友参考一下 一般来说,观察者模式的定义应该是这样的:building a clean interface between the source of news that some object has changed and the consumers
本文向大家介绍设计模式中的观察者模式在Ruby编程中的运用实例解析,包括了设计模式中的观察者模式在Ruby编程中的运用实例解析的使用技巧和注意事项,需要的朋友参考一下 观察者模式(有时又被称为发布/订阅模式)是软件设计模式的一种。 在此种模式中,一个目标对象管理所有相依于它的观察者对象,并且在它本身的状态改变时主动发出通知。 这通常透过呼叫各观察者所提供的方法来实现。 实现观察者模式的时候要注意,
本文向大家介绍Ruby使用设计模式中的代理模式与装饰模式的代码实例,包括了Ruby使用设计模式中的代理模式与装饰模式的代码实例的使用技巧和注意事项,需要的朋友参考一下 代理模式 需求: 小明让小李替他追小丽(送洋娃娃,送花,送巧克力) 没有代理的代码: 只有代理的代码: 只是把追求者类换成了代理类。 实际的代理模式代码: 装饰模式 需求: 给人搭配不同的服饰 代码版本一 这样写的话,功能是实现
本文向大家介绍实例解析观察者模式及其在Java设计模式开发中的运用,包括了实例解析观察者模式及其在Java设计模式开发中的运用的使用技巧和注意事项,需要的朋友参考一下 一、观察者模式(Observer)的定义: 观察者模式又称为订阅—发布模式,在此模式中,一个目标对象管理所有相依于它的观察者对象,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来事件
介绍 代理,顾名思义就是帮助别人做事,GoF对代理模式的定义如下: 代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问。 代理模式使得代理对象控制具体对象的引用。代理几乎可以是任何对象:文件,资源,内存中的对象,或者是一些难以复制的东西。 正文 我们来举一个简单的例子,假如dudu要送酸奶小妹玫瑰花,却不知道她的联系方式或者不好意思,想委托大叔去送这些玫瑰,那大叔就是个代理(其实
本文向大家介绍详解Ruby设计模式编程中对单例模式的运用,包括了详解Ruby设计模式编程中对单例模式的运用的使用技巧和注意事项,需要的朋友参考一下 简介 单例模式是设计模式中最简单的形式之一。这一模式的目的是使得类的一个对象成为系统中的唯一实例。要实现这一点,可以从客户端对其进行实例化开始。因此需要用一种只允许生成对象类的唯一实例的机制,“阻止”所有想要生成对象的访问。使用工厂方法来限