Java代理模式及应用(一)代理模式介绍
2017-09-17 18:37
274 查看
1. 什么是代理模式
提供了对目标对象另外的访问方式;即通过代理对象访问目标对象,这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问。
这里使用到编程中的一个思想:不要随意去修改别人已经写好的代码或者方法,如果需改修改,可以通过代理的方式来扩展该方法
我们可以通过下面两个图来大概了解下代理模式:
目标对象:肉块,Client客户端直接吃肉块。
代理模式:汉堡,在肉块外面包了蔬菜、面饼,Client客户端直接吃汉堡,间接吃了肉块。当然,吃汉堡肯定比吃肉块更可口!
2. 代理模式
下面我们来了解下代理模式的类图:代理模式分为以下角色:
抽象角色(Subject)(规定为食物):声明真实对象和代理对象的共同接口。
代理角色(Proxy)(汉堡包):代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能够代替真实对象。
同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装。
真实角色(RealSubject)(肉块):代理角色所代表的真实对象,是我们最终要引用的对象。
3. 代理模式代码实现
代码结构如下:Clinet:客户端调用
ISubject:抽象角色
RealSubject:继承ISubject,真实角色
ProxySubject:继承ISubject,代理角色
Clinet.java
public class Client { public static void main(String[] args) { new ProxySubject(new RealSubject()).request(); } }
ISubject.java
public interface ISubject { public void request(); }
ProxySubject.java
public class ProxySubject implements ISubject{ //代理角色对象内部含有对真实对象的引用 private ISubject realSubject; public ProxySubject(ISubject realSubject){ this.realSubject = realSubject; } @Override public void request() { //真实角色所完成的事情 realSubject.request(); //在真实角色操作之后所附加的操作 log(realSubject.getClass().getName()); } private void log(String className) { System.out.println("代理AOP切入--打印log--"+className); } }
RealSubject.java
public class RealSubject implements ISubject { @Override public void request() { System.out.println("From Real Subject1!"); } }
运行结果:
相关文章推荐
- 代理模式--介绍、应用及代码
- 代理模式【介绍、静态代理、动态代理、入门、应用】
- 代理模式【介绍、静态代理、动态代理、入门、应用】
- iOS协议与代理设计模式介绍与使用
- 【ThinkPHP】介绍应用模式
- JAVA学习--接口的应用:代理模式
- 动态代理及反射在工厂模式上的应用
- 设计模式感触之代理模式应用
- 简单的协议应用-代理模式
- 单例模式介绍和应用
- ym——浅谈抽象与接口(含工厂、适配器、代理模式应用)(新)
- 关于Flyweight模式应用实践的相关介绍
- 代理设计模式在 UIScrollView 中的应用
- JAVA学习--接口的应用:代理模式
- 协议的应用—代理设计模式
- 关于.NET动态代理的介绍和应用简介
- 设计模式的应用场景(8)--代理模式
- RPC中nio和代理模式的应用
- Android设计模式应用-代理模式
- Activity的四种启动模式的介绍及其应用场景