`
zhouzhao21
  • 浏览: 72680 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

设计模式之代理(利用间接通信改善系统设计的模式)

阅读更多
代理模式(利用间接通信改善系统设计的模式):
    代理模式给某一对象提供一个代理对象,并由代理对象控制对原对象的引用。
    间接性的通信可以给出较低的耦合关系,较强的合作关系,以及微妙的结构和易于复用的设计架构。
    所谓代理(proxy or surrogate),就是一个人或者一个机构代表另一个人或者另一个机构采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
如果按照使用目的来划分,代理有以下几种:
远程(Remote)代理:
虚拟(Virtual)代理:
Copy-on-Write 代理:
保护(Protect or Access)代理:
Cache 代理:
防火墙(firewall)代理:
同步化(Synchronization)代理:
智能引用(Smart Reference)代理:
代理模式所涉及的角色有:
抽象主题角色:声明了真实主题和代理主题的共同接口,这样一来在任何可以使用真实主题的地方都可以使用代理主题。
代理主题角色:代理主题角色内部含有对真实主题的引用,从而可以在任何时候操作真实主题对象,代理主题角色内部含有对真实主题角色相同的接口,以便可以在任何时候都可以替代真实主题。
真实主题角色:代理角色所代表的真实对象。
代理模式是怎样工作的:
首先,代理主题并不改变主题的接口,因为模式的用意是不让客户端感觉到代理的存在。
其次,代理使用委派将客户端的调用委派给真实的主题对象,换言之,代理主题起到的是一个传递请求的作用。
最后,代理主题在传递请求这前和之后都可以执行特定的操作,而不是单纯传递请求。
代理模式将一个中间层插入到客户端和主题角色之间,从而提供了许多的灵活性。

Java 语言通过 java.lang.reflect 库中提供了三个类直接支持代理模式:Proxy 、InvocationHandler 和 Method 。其中 Proxy 类使得设计师能够在运行时间创建代理对象。
设计师创建动态代理的步骤:
1。指明一系列的接口来创建一个代理对象。
2。创建一个调用处理器(Invocation Handler)对象。
3。将这个代理指定为某个其他对象的代理对象。
4。在调用处理器的 invoke() 方法中采用代理,一方面将调用传递给真实对象,另一方面执行各种需要做的操作。


代理模式与其它模式的关系:
适配器模式:适配器模式的用意是要改变所考虑的对象的接口,而代理模式并不能改变所代理的对象的接口,在这一点上两个模式有明显的区别。
装饰模式:装饰模式应当为所装饰的对象提供增强功能;而代理模式对对象的使用施加控制,并不提供对象本身的增强功能。
门面模式:有时候,门面模式兼任代理的责任,这种时候的门面模式又叫代理门面模式,或门面代理模式。

不同种类的代理:
远程代理:
优点是系统可以将网络的细节隐藏起来,使得客户端不必考虑网络的存在。缺点是由于客户可能没有意识到会启动一个耗费时间的远程调用,因此,客户没有必要的思想准备。
虚拟代理:
优点是代理对象可以在必要的时候才将被代理的对象加载。代理可以对加载的过程加以必要的优化。当一个模块的加载十分耗费资源的时候,虚拟代理的优点就非常明显。
当一个真实主题对象的加载需要耗费资源时,一个虚拟代理对象可以代替真实对象接受请求。一旦接到请求,代理对象马上打出一段 "正在加载" 的信息,并在适当的时候加载真实主题对象,也就是模块等资源。
保护代理:
优点是它可以在运行时间对用户的有关权限进行检查,在核实后决定是否将调用传递给被代理的对象。
智能引用代理:
在访问一个对象时可以执行一些内务(Housekeeping)处理操作,如计数操作等。

有经验的设计师不会仅仅给出一个具体类就交差,因为设计师必须考虑到查询功能在今后可能会有的变化。因此,一个好的设计必须使系统可以在最小的改动下进行最大的扩充。
代理模式的用意之一,要针对抽象编程,不要针对具体编程。


SwingUtilities.invokeLater() 方法会开启一个独立的新线程,用以执行一个新的任务(异步执行)。SwingUtilities.invokeAndWait() 方法与前者不同的是,它会将主线程的执行封锁住,直到新线程的任务完成为止(同步执行)。
分享到:
评论

相关推荐

    设计模式之代理模式demo

    代理模式是一种常用的设计模式,它在软件开发中起到了中介或者代表的作用。代理模式的主要目的是为其他对象提供一种代理以控制对这个对象的访问。通过引入代理,我们可以增加新的功能,如缓存、日志记录、访问控制等...

    设计模式-代理模式

    总结来说,代理模式是iOS开发中不可或缺的设计模式,它帮助我们构建松耦合的系统,提供了扩展性和灵活性。通过定义和遵循协议,代理对象可以控制和增强对目标对象的访问,实现各种复杂功能,如数据传递、事件响应和...

    设计模式实现——代理模式

    代理模式是设计模式的一种,它提供了一种对目标对象的间接访问方式,使得客户端可以通过代理对象来调用实际的目标对象,从而增加了一些额外的功能或控制。代理模式可以分为静态代理和动态代理两种类型。 1. **静态...

    设计模式之代理模式Java实现和类设计图

    代理模式是一种常用的设计模式,它在软件开发中起到了中介或者代表的作用,允许我们在不修改原对象的情况下,通过代理对象来间接地对原对象进行控制。代理模式的核心思想是为一个对象提供一个代理,并由代理对象控制...

    23种JAVA设计模式和15种J2EE设计模式

    为了更好地利用这些服务,开发者们总结了许多有效的设计模式,接下来将简要介绍几种常用的J2EE设计模式。 ##### 2.1 J2EE设计模式简介 J2EE设计模式主要关注于如何在J2EE环境中构建可伸缩、可维护的应用程序。这些...

    设计模式(八)之静态代理模式.zip

    静态代理模式是设计模式中的一种,它属于结构型模式,主要用来在不修改原有对象的基础上,通过一个代理对象来增强或扩展原对象的功能。在本篇文章中,我们将深入探讨静态代理模式的概念、工作原理以及其优缺点。 ##...

    设计模式精解 设计模式精解

    根据给定的信息,本文将深入探讨GoF23种设计模式的核心概念及其应用场景,并通过具体的实例来解析每一种设计模式的实现原理和技术要点。 ### 0. 引言 设计模式是一系列被广泛接受的解决方案,用于解决软件设计中...

    软件设计模式作业三行为式模式

    3. 中介者模式:它用来减少对象之间的耦合,通过引入一个中介对象,使得原本直接相互引用的对象可以间接通过中介进行通信,降低了系统的复杂性。 4. 备忘录模式:在不破坏封装性的前提下,保存对象的内部状态,以便...

    手机设计模式大观

    7. **代理模式**:在处理复杂的触摸事件或实现组件间的间接通信时,代理模式能起到关键作用,比如在滑动手势的处理中。 8. **装饰者模式**:用于在运行时动态地给对象添加功能,例如在移动应用中,为了实现不同的...

    23种设计模式--门面模式

    在提供的资源“第17课_设计模式之门面模式.avi”中,可能包含了对门面模式的详细讲解和实例演示,可以帮助你更深入地理解和掌握这一设计模式。通过观看视频,你将有机会看到如何在实际代码中应用门面模式,以及如何...

    设计模式之行为模式 23种模式中的几种

    "设计模式之行为模式 23种模式中的几种" 行为模式是设计模式的一种,涉及到算法和对象间职责的分配。行为模式不仅描述对象或类的模式,还描述它们之间的通信模式。这些模式刻划了在运行时难以跟踪的复杂的控制流。...

    java23种设计模式之观察者模式

    **观察者模式(Observer Pattern)**是软件设计模式中的一种行为模式,它在Java中有着广泛的应用。这个模式的核心思想是“一对多”的依赖关系,即一个主题对象(Subject)可以被多个观察者(Observer)关注,当主题...

    设计模式之中介者模式(Mediator)

    在软件工程中,设计模式是一种被广泛采用的解决常见问题的经验总结,其中中介者模式是结构型设计模式的一种。它的主要目标是降低对象之间的耦合度,使得对象之间的关系更加清晰,同时也提高了代码的可维护性和可扩展...

    设计模式之外观模式和代理模式

    外观模式(Facade Pattern)和代理模式(Proxy Pattern)是软件设计模式中常见的两种行为模式,主要目的是为了解决复杂系统或子系统内部结构的复杂性,并通过一个简单的接口与外界交互。 外观模式的核心思想是为一...

    简单的一些非经典的objc设计模式

    在Objective-C(objc)编程中,...这些非经典设计模式充分利用了Objective-C的动态特性,使得代码更简洁、灵活,同时保持了良好的设计原则。在实际开发中,理解并合理应用这些模式能显著提升代码质量,降低维护成本。

    设计模式精解(GoF 23 种设计模式解析)

    ### 设计模式精解——GoF 23种设计模式解析 #### 0. 引言 设计模式作为面向对象编程的重要组成部分,在软件工程领域扮演着至关重要的角色。本文档旨在通过对GoF(Gang of Four)提出的23种设计模式进行深度解析,...

    [结构型模式] 代理模式的理解

    总的来说,代理模式是一种强大的设计模式,它可以在不修改原有对象的情况下,为对象添加新的功能,提高系统的灵活性和可扩展性。理解并熟练运用代理模式对于提升软件设计的质量和可维护性具有重要意义。

Global site tag (gtag.js) - Google Analytics