《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类。
代理模式:
远程代理
虚拟代理 :虚拟代理控制访问实例化开销大的对象。
- 保护代理 :保护代理基于调用者控制对对象方法的访问。
《Head First 设计模式》之代理模式的更多相关文章
- Java基础-设计模式之-代理模式Proxy
代理模式是对象的结构模式.代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用. 代理模式是常用的Java 设计模式,它的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理 ...
- java设计模式之Proxy(代理模式)
java设计模式之Proxy(代理模式) 2008-03-25 20:30 227人阅读 评论(0) 收藏 举报 设计模式javaauthorizationpermissionsstringclass ...
- 黑马程序员:Java基础总结----静态代理模式&动态代理
黑马程序员:Java基础总结 静态代理模式&动态代理 ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 静态代理模式 public class Ts { ...
- Java的三种代理模式
Java的三种代理模式 1.代理模式 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩 ...
- Java设计模式之《代理模式》及应用场景
原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6525527.html 代理模式算是我接触较早的模式,代理就是中介,中间人.法律上也有代理, ...
- Java的三种代理模式简述
本文着重讲述三种代理模式在java代码中如何写出,为保证文章的针对性,暂且不讨论底层实现原理,具体的原理将在下一篇博文中讲述. 代理模式是什么 代理模式是一种设计模式,简单说即是在不改变源码的情况下, ...
- Java进阶篇设计模式之七 ----- 享元模式和代理模式
前言 在上一篇中我们学习了结构型模式的组合模式和过滤器模式.本篇则来学习下结构型模式最后的两个模式, 享元模式和代理模式. 享元模式 简介 享元模式主要用于减少创建对象的数量,以减少内存占用和提高性能 ...
- 理解java的三种代理模式
代理模式是什么 代理模式是一种设计模式,简单说即是在不改变源码的情况下,实现对目标对象的功能扩展. 比如有个歌手对象叫Singer,这个对象有一个唱歌方法叫sing(). 1 public class ...
- Java的三种代理模式(Spring动态代理对象)
Java的三种代理模式 1.代理模式 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩 ...
- Java设计模式之七 ----- 享元模式和代理模式
前言 在上一篇中我们学习了结构型模式的组合模式和过滤器模式.本篇则来学习下结构型模式最后的两个模式, 享元模式和代理模式. 享元模式 简介 享元模式主要用于减少创建对象的数量,以减少内存占用和提高性能 ...
随机推荐
- ASP.NET-GridView之固定表数据滚动
有时候,在线Web开发时,需要显示的数据往往会超过我们规定的表格长度,所以为了方便显示大量数据,为了美观,这里提出了两种显示数据方式. ①可以滚动显示数据但是表头未能获取 效果显示 前端DEMO &l ...
- IE兼容css3圆角的htc解决方法
IE兼容css教程3圆角的htc解决方法 现在css3的border-radius属性可以很方便的实现圆角功能,对网站前台人员无疑是一件喜事,但悲剧的是IE6/7/8并不支持,让我们弃新技术不用,是不 ...
- 3. mybatis # 与 $ 的区别
mybatis # 与 $ 的区别 1.# % 号必须写在test中 应用场景:模糊查询 配置文档mapper.xml <select id="selectBlogByTitle&qu ...
- Android layout布局属性、标签属性总结大全
RelativeLayout 第一类:属性值为true可false android:layout_centerHrizontal 水平居中 android:layout_centerVe ...
- 解决SharePoint密码更新后,创建Web Application 失败
问题在sharepoint central administration中通过Configuration Wizards来创建一个web application,出现如下错误: The passwor ...
- Dijkstra算法图文详解
Dijkstra算法 Dijkstra算法算是贪心思想实现的,首先把起点到所有点的距离存下来找个最短的,然后松弛一次再找出最短的,所谓的松弛操作就是,遍历一遍看通过刚刚找到的距离最短的点作为中转站会不 ...
- hdu6446 Tree and Permutation 2018ccpc网络赛 思维+dfs
题目传送门 题目描述:给出一颗树,每条边都有权值,然后列出一个n的全排列,对于所有的全排列,比如1 2 3 4这样一个排列,要算出1到2的树上距离加2到3的树上距离加3到4的树上距离,这个和就是一个排 ...
- 江西财经大学第一届程序设计竞赛 E
链接:https://www.nowcoder.com/acm/contest/115/E来源:牛客网 题目描述 当你的好友给你发来一条消息,你的消息列表上就会置顶显示该好友的名字以及该好友发给你的消 ...
- Windows无法启动 VMware Workstation server服务解决方法
Windows无法启动VMware Workstation server服务, 可以通过删除datastores.xml文件来解决. 具体操作步骤如下: 1.在系统盘目录下,找到C:\ProgramD ...
- ubuntu14.04下 安装matlabR2015b遇到的一些问题及其解决方法
问题1:错误提示关于未取得权限,不能再/crack/bin文件中复制文件到安装matlab的/usr/bin文件中? 采取解决方法: 再终端里输入 sudo nautilus,在弹出文件夹里即可进行相 ...