`
eriol
  • 浏览: 409046 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Head First 设计模式--Proxy

阅读更多

Chapter 11 --代理模式

                                   控制对象的访问

 

1. 远程代理就好比“远程对象的本地代表”。所谓远程对象,是指在不同的Java虚拟机堆中的对象(或者说在不同的地址空间运行的远程对象)。所谓本地代表,是指一种可以由本地方法调用的对象,其行为会转发到远程对象中。


2. 客户对象所做的就像是在做远程方法调用,但其实只是调用本地堆中的“代理”对象上的方法,再由代理处理所有网络通信的低层信息。


3. RMI提供了客户辅助对象(stub)和服务辅助对象(skeleton),为客户辅助对象创建和服务对象相同的方法。RMI的好处在于你不必亲自写任何网络或I/O代码。客户程序调用远程方法就和在本地JVM上对对象进行正常的方法调用一样。

 

4. 制作远程服务

 

(1) 制作远程接口:远程接口定义出可以让客户远程调用的方法。客户将用他作为服务的类类型。stub和实际的服务都实现此接口。=>MyService.java

(2) 制作远程的实现:这是做实际工作的类,为远程接口中定义的远程方法提供了真正的实现。这是客户真正想要调用方法的对象。=>MyServiceImpl.java

(3) 利用rmic产生的stub和skeleton:这就是客户和服务的辅助类。你不需要自己创建这些类,因为当你运行rmic工具时,这都会自动处理。=> rmic MyServiceImpl

(4) 启动RMI registry:rmiregistry就像是电话簿,客户可以从中查到代理(stub)的位置。=>rmiregistry

(5) 开始远程服务:你必须让服务对象开始运行。你的服务实现类会去实例化一个服务的实例,并将这个服务注册到RMI registry。注册之后,这个服务就可以供客户调用了。 =>java MyServiceImpl



代理模式:
为另一个对象提供一个替身或占位符以控制对这个对象的访问。

proxy
Structure
  • subject: 它为RealSubject和Proxy提供了接口。因为Proxy和RealSubject都实现了Subject接口,这就允许任何客户都可以想处理RealSubject对象一样地处理Proxy对象,使得Proxy可以在RealSubject出现的地方取代它。
  • RealSubject: 它是真正做事的对象,Proxy会控制对RealSubject的访问。
  • Proxy: Proxy持有RealSubject的引用,在必要时它可以将请求转发给RealSubject。客户和RealSubject的交互都必须通过Proxy,Proxy控制了对Realsubject的访问,有时,Proxy还会负责RealSubject对象的创建和销毁。

5. 使用代理模式创建代表(representative)对象,让代表对象控制某对象的访问,被代理的对象可以是远程对象、创建开销大的对象或需要安全控制的对象。
(1) 远程代理控制访问远程对象。
(2) 虚拟代理控制访问创建开销大的资源。
(3) 保护代理基于权限控制对资源的访问。

虚拟代理
虚拟代理作为创建开销大的对象的代表。虚拟代理经常直到我们真正需要一个对象的时候才创建它。当对象在创建前和创建中时,由虚拟代理来扮演对象的替身。对象创建后,代理就会将请求直接委托给对象。

6. Java在java.lang.reflect包中有自己的代理支持,利用这个包你可以再运行时动态地创建一个代理类,实现一个或多个接口,并将方法的调用转发到你所指定的类。因为实际的代理类是在运行时创建的,我们称这个Java技术为动态代理。

7. 可以利用Java的动态代理创建一个保护代理。因为Java已经为我们创建了Proxy类,所以你需要有办法来告诉Proxy类你要做什么。因为Proxy不是你直接实现的,你不能将代码放在Proxy类中,那么只能放在InvocationHandler中。InvocationHandler的工作是响应代理的任何调用。
保护代理是一种根据访问权限决定客户可否访问对象的代理。

protect proxy
Structure
  • Proxy: Proxy是由Java产生的,而且实现了完整的Subject接口。
  • InvocationHandler: 由开发者提供InvocationHandler,Proxy上的任何方法调用都会被传入此类。InvocationHandler控制对RealSubject方法的访问。
  • 代理现在包含Proxy和InvocationHandler两个类。

8. 代理类有一个静态方法,叫做isProxyClass()。此方法的返回值如果为true,表示这是一个动态代理类。除此之外,代理类还会实现特定的某些接口。


其他代理
(1) 防火墙代理(Firewall Proxy):控制网络资源的访问,保护主题免于“坏客户”的侵害。常用于公司的防火墙系统。
(2) 智能引用代理(Smart Reference Proxy):当主题被引用时,进行额外的动作,例如计算一个对象被引用的次数。
(3) 缓存代理(Caching Proxy):为开销大的运算结果提供暂时存储,它也允许多个客户共享结果,以减少计算或网络延迟。常用于Web服务器代理,以及内容管理与出版系统。
(4) 同步代理(Synchronization Proxy):在多线程的情况下为主题提供安全的访问。用于JavaSpaces,为分布式环境内的潜在对象集合提供同步访问控制。
(5) 复杂隐藏代理(Complexity Hiding Proxy):用来隐藏一个类的复杂集合的复杂度,并进行控制访问。有时也称为外观代理(Facade Proxy)。复杂隐藏代理和外观模式是不一样的,因为代理控制访问,而外观模式只提供另一组接口。
(6) 写入时复制代理(Copy-On-Write Proxy):用来控制对象的复制,方法是延迟对象的复制,直到客户真的需要为止。这是虚拟代理的变体。


本章小结:
  • 代理模式为另一个对象提供代表,以便控制客户对对象的访问,管理访问的方式有许多种。
  • 远程代理管理客户和远程对象之间的交互。
  • 虚拟代理控制访问实例化开销大的对象。
  • 保护代理基于调用者控制对对象方法的访问。
  • 代理模式有许多变体,例如:缓存代理、同步代理、防火墙代理和写入时复制代理。
  • 代理在结构上类似于装饰者,但是目的不同。
  • 装饰者模式为对象加上行为,而代理则是控制访问。
  • Java内置的代理支持,可以根据需要建立动态代理,并将所有调用分配到所选的处理器。
  • 就和其他的包装者(warpper)一样,代理会造成你的设计中类的数目增加。
0
0
分享到:
评论

相关推荐

    Head First 设计模式-中文版

    《Head First 设计模式》是IT领域内广受赞誉的一本书,主要针对C#和Java开发者,深入浅出地介绍了设计模式这一核心编程概念。设计模式是软件开发中经过实践验证的解决方案模板,用于解决常见问题,提升代码的可读性...

    Headfirst设计模式中文高清PDF+附书源码

    《Headfirst设计模式》是一本深受开发者欢迎的设计模式学习书籍,尤其对于初学者而言,其独特的教学方式使得复杂的概念变得易于理解。这本书以其高清的中文版PDF格式提供,结合书中源码,为读者提供了深入实践的可能...

    [中文]Head-First设计模式.pdf

    《Head-First设计模式》是一本面向初学者的优秀设计模式教程,主要针对Java编程语言。这本书通过易于理解的方式介绍了23种经典的GoF设计模式,帮助开发者提升代码的可复用性和可维护性。设计模式是软件工程中的重要...

    head first 设计模式 高清完整版 pdf

    《Head First设计模式》是一本深受开发者喜爱的经典书籍,它以独特、生动的方式讲解了设计模式这一核心的软件工程概念。设计模式是经验丰富的开发者在解决常见问题时总结出的最佳实践,它们为软件设计提供了可复用的...

    Head.First设计模式_PDF

    第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、Abstract Factory、Factory Method、Singleton、Command、Adapter、Facade、Template Method、iterator、Composite、State、proxy。最后三章比较...

    Head First设计模式和HeadFirst in java 源码以及23种设计模式关系图

    总的来说,这个压缩包包含的资源可以帮助你深入理解设计模式,通过《HeadFirst设计模式》和《HeadFirst in Java》的源码,你可以学习到如何在实际项目中应用这些模式。而UML类图则提供了直观的视角,便于你把握设计...

    HeadFirst设计模式JAVA版源码

    《HeadFirst设计模式JAVA版源码》是一份深入学习设计模式的重要资源,它基于流行的编程语言Java,旨在帮助开发者理解并应用设计模式于实际项目中。设计模式是软件工程中的重要概念,它代表了在特定场景下解决问题的...

    HeadFirst设计模式PPT

    《HeadFirst设计模式》是一本深受开发者欢迎的书籍,它以独特、易理解的方式介绍了软件设计中的重要概念——设计模式。设计模式是经验丰富的开发者在解决常见问题时总结出的最佳实践,它们为软件设计提供了可复用的...

    head first 设计模式 PDF电子书下载

    《Head First 设计模式》是一本深受欢迎的设计模式书籍,由Eric Freeman、Elisabeth Robson、Bert Bates和Kathy Sierra合著。这本书以其独特的视觉呈现方式和易理解的教学方法,深受程序员们的喜爱,尤其是那些希望...

    [中文]Head-First设计模式

    《Head-First设计模式》是设计模式领域内一本广受欢迎的入门书籍,以其独特的视觉呈现方式和易懂的讲解风格,让初学者也能快速理解并掌握设计模式的精髓。设计模式是软件工程中的一种最佳实践,是解决常见编程问题的...

    Head First Design Patterns 英文版 Head First设计模式

    《Head First Design Patterns》是一本深入浅出介绍设计模式的图书,由Eric Freeman、Elisabeth Freeman、Bert Bates和Kathy Sierra联合编写。本书结合认知科学原理和神经生物学研究,采用引导式教学方法,通过故事...

    Head-First-Design-Patterns-master.zip

    《Head First设计模式》是一本深受开发者喜爱的设计模式入门书籍,其官方源码库"Head-First-Design-Patterns-master.zip"包含了书中所讲解的各种设计模式的实际代码示例,旨在帮助读者更深入地理解并应用这些模式。...

    HeadFirst设计模式源代码

    《HeadFirst设计模式源代码》是一本面向程序员的深度学习设计模式的书籍,它通过直观易懂的方式将复杂的概念转化为生动的图像和有趣的例子,帮助读者深入理解并掌握设计模式。设计模式是软件工程中的一种最佳实践,...

    headfirst设计模式

    《Head First设计模式》是一本深受开发者欢迎的设计模式教程,以其独特的视觉呈现方式和易于理解的语言,让初学者也能快速掌握设计模式的核心概念。这本书深入浅出地介绍了23种GOF(GoF,Gamma、Erich、Johnson、...

    head first 设计模式

    《Head First设计模式》(中文版)共有14章,每章都介绍了几个设计模式,完整地涵盖了四人组版本全部23个设计模式。前言先介绍这本书的用法;第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、...

    Head First 设计模式 源代码

    《Head First 设计模式》是一本非常受欢迎的软件设计书籍,它以易懂且生动的方式介绍了23种经典的GOF设计模式。这本书的源代码包含了书中所有示例的实现,对于学习和理解设计模式有着极大的帮助。源代码的下载使得...

    Head First设计模式 源代码

    《Head First设计模式》是一本深受开发者喜爱的设计模式学习书籍,它以易懂、生动的方式讲解了23种经典的设计模式。源代码是书中理论知识的实践体现,可以帮助读者更深入地理解并应用这些模式。这里我们将围绕这些...

    HeadFirst设计模式英文版

    《Head First 设计模式》的英文版是一本面向初学者的设计模式入门书籍,它以幽默风趣的文风,深入浅出地介绍了软件设计中经常使用的设计模式。设计模式是一套被反复使用、多数人知晓、经过分类编目、代码设计经验的...

    《Head.First设计模式》书中源代码(Java语言)

    《HeadFirst设计模式》是设计模式领域的一本经典著作,以其独特的教学方式和生动的插图深受初学者喜爱。这本书通过实例和互动式的学习方法,深入浅出地讲解了23种经典的设计模式。源代码作为理论知识的实践部分,...

Global site tag (gtag.js) - Google Analytics