设计模式之代理模式
2015-12-18 21:01
183 查看
定义:
为其他对象提供了一种代理,以控制对这个对象的访问。
角色:
抽象实体类(Subject):定义了实体类和代理的公用接口;
实体类(RealSubject):需要控制访问的实体对象即代理的对象;
代理类(Proxy):控制对实体的访问,在代理类中保存一个对实体的引用,以便调用实体对象的接口。
UML图:
适用场景:
1.远程代理:为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。
2.虚拟代理:根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。
3.安全代理:用来控制真实对象访问时的权限。
4.智能指引:当调用真实的对象时,代理处理另外一些事。
实例代码:
为其他对象提供了一种代理,以控制对这个对象的访问。
角色:
抽象实体类(Subject):定义了实体类和代理的公用接口;
实体类(RealSubject):需要控制访问的实体对象即代理的对象;
代理类(Proxy):控制对实体的访问,在代理类中保存一个对实体的引用,以便调用实体对象的接口。
UML图:
适用场景:
1.远程代理:为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。
2.虚拟代理:根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。
3.安全代理:用来控制真实对象访问时的权限。
4.智能指引:当调用真实的对象时,代理处理另外一些事。
实例代码:
/* * 代理模式 */ /* * 实体类和代理的公用接口 */ interface Subject{ abstract public void Request(); } /* * 实体类 */ class RealSubject implements Subject{ public void Request(){ System.out.println("实体类"); } } /* * 代理 */ public class Proxy implements Subject{ //对实体类的一个引用 private RealSubject rs; public Proxy(){ if(rs == null) rs = new RealSubject(); } public void Request(){ //调用实体类的方法 rs.Request(); } }
public class Main { public static void main(String[] args) { //实例化代理类 Proxy proxy = new Proxy(); proxy.Request(); } }
相关文章推荐
- 在主函数中提示用户输入用户名和密码。另写一方法来判断用户输入是否正确。该方法分别返回一个bool类型的登录结果和和一个string类型的登录信息。如登录成功,返回true及“登录成功”,若登录失败则返回false及“用户名错误”或“密码错误”(使用out参数)
- 17-1 UI高级可视化设计
- Shimmer辉光动画效果
- Foundation各种NS
- Java API —— TreeSet类
- JS实现鼠标经过用户头像显示资料卡的效果,可点击
- 数据结构学期总结
- 【Modern OpenGL】创建窗口
- 16 JSON解析、XML解析(DOM解析,SAX解析)
- android 数据安全中常用的加密算法 3 RSA
- python 学习第八课 -- 异常 反射 socket
- 1.TwoSum
- PHP字符串函数之 strpos stripos strrpos strripos
- 面向对象和面向过程区别
- 图像显著性论文(一)—A Model of saliency Based Visual Attention for Rapid Scene Analysis
- 开发前言
- LeetCode Longest Common Prefix
- 有关Laplace的部分分式展开法_20151217
- 15 UITabBarController、block高级(+UIMenuController_UIPasteBoard、MBProgressHud)
- 长连接的定义及其优缺点,以及在不同的浏览器中的支持情况