java设计模式学习笔记3 代理模式-静态代理
2014-02-15 14:49
645 查看
代理的作用是:为其他对象提供一种代理用以控制这个对象的访问。代理可以起到一种中介的作用。
代理模式有三个角色
1 抽象角色:是真实角色和代理角色真实的接口。
2 代理角色:含有对真实角色的引用,可以操纵真实角色,在封装真实角色的同时可以附加其他操作
3 真实角色:代理角色所代表的真实对象,是最终要引用的对象。
代理模式分为静态代理模式和动态代理模式,先说静态代理模式
一、建一个抽象角色,可以用抽象类,也可以用接口
二、新建真实角色,实现抽象角色
三、新建代理角色,含有对真实角色的应用,可以封装其他附加操作
四、简单测试
before request
realSubject invoked!!
after request
然而java的静态代理在实际应用中又一些不足:
1,真实角色必须事先存在;2,一个真实角色必须又一个代理角色,大量使用会导致类的数目膨胀,3,若事先不知道真实角色,要如何代理?
这些问题可以用动态代理模式解决
代理模式有三个角色
1 抽象角色:是真实角色和代理角色真实的接口。
2 代理角色:含有对真实角色的引用,可以操纵真实角色,在封装真实角色的同时可以附加其他操作
3 真实角色:代理角色所代表的真实对象,是最终要引用的对象。
代理模式分为静态代理模式和动态代理模式,先说静态代理模式
一、建一个抽象角色,可以用抽象类,也可以用接口
/** * Created by charleszhu on 14-2-15. * 抽象角色 */ public interface Subject { public void request(); }
二、新建真实角色,实现抽象角色
/** * Created by charleszhu on 14-2-15. * 真实角色 */ public class RealSubject implements Subject { @Override public void request() { System.out.println("realSubject invoked!!"); } }
三、新建代理角色,含有对真实角色的应用,可以封装其他附加操作
/** * Created by charleszhu on 14-2-15. * 代理角色 */ public class ProxySubject implements Subject { private RealSubject realSubject;//代理角色内部持有真实角色的引用,用来操纵找真实结果 @Override public void request() { // 可以封装附加操作 this.before(); if(null == realSubject){ realSubject = new RealSubject(); } realSubject.request(); // 封装附加操作 this.after(); } // 代理角色可以增加新的功能 public void before(){ System.out.println("before request"); } // 代理角色可以增加新的功能 public void after(){ System.out.println("after request"); } }
四、简单测试
/** * Created by charleszhu on 14-2-15. */ public class Client { public static void main(String[] args) { Subject ps = new ProxySubject(); ps.request(); } }输出结果:
before request
realSubject invoked!!
after request
然而java的静态代理在实际应用中又一些不足:
1,真实角色必须事先存在;2,一个真实角色必须又一个代理角色,大量使用会导致类的数目膨胀,3,若事先不知道真实角色,要如何代理?
这些问题可以用动态代理模式解决
相关文章推荐
- 代理角色java设计模式之静态代理详细介绍
- PHP设计模式之代理模式的深入解析
- 深入解析java中的静态代理与动态代理
- java 静态代理 动态代理深入学习
- 探索JAVA动态代理机制
- 从赵本山的小品联想到的Java设计模式
- JAVA设计模式学习第三天 设计模式之Chain of Responsibility——项目篇
- 学习:java设计模式—工厂模式
- 代理/动态代理(Proxy)模式
- 代理模式
- Java设计模式 创建模式-工厂模式(Factory)
- Java设计模式 创建模式-原型模式(Prototype)
- Java设计模式 创建模式-生成器模式(Builder)
- Java设计模式 创建模式-单态模式(Singleton)
- Java设计模式 结构模式-适配器模式(Adapter)
- 设计模式-创建型:单例模式(1)
- java设计模式(二):2.1责任链(简单一条链)
- java 设计模式有趣见解
- Java静态代理、动态代理
- JDK动态代理的简单实现