zoukankan      html  css  js  c++  java
  • 《Head First 设计模式》之代理模式

    代理模式(Proxy):控制对象访问

      ——为另一个对象提供一个替身或占位符来访问这个对象。

    要点:

    • 代理模式有许多变体,如:缓存代理、同步代理、防火墙代理和写入时复制代理
    • 代理在结构上类似装饰者,但目的不同。
    • 装饰者模式为对象加上行为,而代理则是控制访问。

    为上一章的糖果机建立一个糖果监视器,在远程监控糖果机。


    远程方法:

    • 客户辅助对象(Client helper)并不真正拥有客户所期望的方法逻辑,它会联系服务器,传送方法调用信息,然后等待服务器返回。
    • 在服务器端,服务辅助对象(Service helper)从客户辅助对象中接收请求(通过Socket连接),将调用的信息解包,然后调用真正服务对象上的方法。
    • 对于服务对象(Service object)来说,调用是本地的,来自服务辅助对象,而不是远程客户。
    • 服务辅助对象得到返回值,将它打包,然后运回到客户辅助对象(通过网络Socket的输出流),客户辅助对象将信息解包,最后将返回值交给客户对象。

    • Java RMI:Remote Method Invocation 远程方法调用。

    • 原语(primitive)类型

    • 可序列化(Serializable)类型

    制作远程服务:

    步骤1:制作远程接口。远程接口定义出可以让客户远程调用的方法。客户将用它作为服务的类类型。Stub和实际的服务都实现此接口。

    步骤2:制作远程的实现。这是做实际工作的类,为远程接口中定义的远程方法提供了真正的实现。这就是客户真正想要调用的方法的对象(例如,我们的GumballMachine)。

    步骤3:利用rmic产生的stub和skeleton。这就是客户和服务的辅助类。你不需要自己创建这些类,甚至连生辰它们的代码都不用看,因为当你运行rmic工具时,这都会自动处理。你可以在JDK中找到rmic。

    步骤4:启动RMI Registry(rmiregistry)。rmiregistry就像是电话簿,客户可以从中查到代理的位置(也就是客户的stub helper对象)。

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

    注意:对于RMI,程序员最常犯的三个错误

    1、忘了在启动远程服务之前先启动rmiregistry(要用Naming.rebind()注册服务,rmiregitry必须是运行的)。

    2、忘了让变量和返回值的类型成为可序列化的类型(这种错误无法在编译期返现,只会在运行时发现)。

    3、忘了给客户端提供stub类。


     

    代理模式:

    • 远程代理

    • 虚拟代理 :虚拟代理控制访问实例化开销大的对象。

    • 保护代理 :保护代理基于调用者控制对对象方法的访问。

      

  • 相关阅读:
    TFIDF<细读>
    数据挖掘工程师的面试问题与答题思路【转】
    CTR常见规则摘录
    分类中数据不平衡问题的解决经验[转载]
    机器学习积累【2】
    机器学习-常见问题积累【1】
    数据的归一化和标准化
    数据挖掘之特征选择
    jupyter-notebook快捷键
    python基础学习记录一
  • 原文地址:https://www.cnblogs.com/-1307/p/6444917.html
Copyright © 2011-2022 走看看