[DesignPattern]ProxyPattern

来源:互联网 发布:vb对皮肤瘙痒有用吗 编辑:程序博客网 时间:2024/06/05 06:21

代理模式

玩过扮白脸、扮黑脸的游戏吗?这就是代理要做的:控制和管理访问。

还记得状态模式的那台糖果机吗?现在我们需要远程监控糖果机。(在开始编码之前,需要收集需求)。

远程代理

  • 远程代理就好比“远程对象的本地代表”。何谓“远程对象“?这是一种对象,活在不同的Java虚拟机(JVM)堆中。
  • 你的客户对象所做的就像是在做远程方法调用,但其实只是调用本地堆中的”代理“上的方法,再由代理处理所有网络通信的低层细节。
  • 中间还穿插了一定的RMI(remote mothod invoke)

代理过程

  • 1.CEO执行监视器,先取得远程糖果机的代理,然后调用每个代理的getState()。
  • 2.代理上的getState()被调用,此调用被转发到远程服务。Skeleton接受到请求,然后转发给糖果机。
  • 3.糖果机将状态返回给skeleton,skeleton将状态序列化,通过网络传回给代理,代理将其反序列化,把他当做一个对象返回给监视器。

代理模式

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

使用代理模式创建代表(representative)对象,让代表对象控制某对象的访问,被代理的对象可以是远程对象、创建开销大的对象或需要安全控制的对象。

虚拟代理

显示CD封面
- 先给个虚拟的CD(CD封面加载中请稍后。。。)
- 再开个线程异步的下载CD.jpg一旦加载完成,代理就把显示的职责委托给Icon。
加载图像和ImageIcon是同步的(synchronous),也就是说,只有在加载完之后,ImageIcon构造器才会返回。这样,我们的程序会耗在这里,动弹不得,也没有办法显示消息,所以要把加载变成异步(asynchronous)。

保护代理

对象村的约会系统,确保一个对象的方法,让不同权限的人是否可以访问?

还有代理模式的变体:防火墙代理、缓存代理、同步代理、写入时复制代理。。。

要点

  • 远程代理管理客户和远程对象之间的交互。
  • 虚拟代理控制访问实例化开销大的对象。
  • 保护代理基于调用者控制对象方法的访问。
  • 代理在结构上类似装饰者,但是目的不同。
  • 装饰者模式为对象加上行为,而代理则是控制访问。
  • Java内置的代理支持,可以根据需要建立动态代理,并将所有调用分配的所选的处理器。
原创粉丝点击