JAVA知识之设计模式(一):代理模式
2017-04-05 14:04
447 查看
代理模式的概念
代理模式就是屏蔽用户对真实对象的访问,而是使用代理对象完成用户的请求。代理对象可以完成真实对象的所有功能,也可以添加特有的和真实对象无关的新功能。生活中也常常见到代理模式的应用,例如我们可以到火车票代理点去购买火车票,代理点就是代理对象,替代火车站售票处来做发售车票的工作。著名的spring框架核心功能AOP也是应用了代理模式,将业务代码和系统代码解耦分离。
代理模式也能用来实现延迟加载功能,很多组件例如建立数据库的连接需要消耗大量的系统资源,软件启动时如果默认加载会造成资源浪费,因此我们初始化代理类,当用户执行数据库操作时,再进行数据库连接,加快了初始化的速度。
静态代理
下面用一个例子说明最普通代理模式:public class Proxy { public static void main(String[] args) { //实例化代理类 ProxyHello ph = new ProxyHello(); ph.sayHello("李艺彤"); } } interface IHello { //定义接口 public void sayHello(String name); } class Hello implements IHello{ public void sayHello(String name){ System.out.println("你好," + name); } } class ProxyHello implements IHello{ private Hello hello; private String name; public void proxyHello(String name){ this.name = name; } public void sayHello(String name) { hello = new Hello(); hello.sayHello(name); } }
动态代理
动态代理更加的灵活,根据调用的代理类方法动态生成代理类,避免了大量书写代理类接口的麻烦,而且也更易维护。动态代理类必须实现InvocationHandler接口,通过调用这个接口的invoke方法来实现代理.
public class DynamicProxy { public static void main(String[] args) { //真实对象 IGoodbye goodbye = new Goodbye(); //传入代理对象调用的真实对象 InvocationHandler handler = new ProxyGoodbye(goodbye); //通过Proxy的newProxyInstance方法来创建我们的代理对象 //handler.getClass().getClassLoader()是代理对象 //goodbye.getClass().getInterfaces()是给代理对象提供的接口 IGoodbye object = (IGoodbye)Proxy.newProxyInstance(handler.getClass().getClassLoader(), goodbye .getClass().getInterfaces(), handler); object.sayGoodbye("李艺彤"); } } interface IGoodbye { //定义接口 public void sayGoodbye(String name); } //真实对象 class Goodbye implements IGoodbye{ public void sayGoodbye(String name) { System.out.println("再见," + name); } } //代理对象 class ProxyGoodbye implements InvocationHandler{ private Object object1; public ProxyGoodbye(Object object){ this.object1 = object; } /** * @param object 代理的真实对象 * @param method 代理的方法 * @param args 传入的参数 */ public Object invoke(Object object2, Method method, Object[] args) throws Throwable { method.invoke(object1, args); return null; } }
相关文章推荐
- 基于Java的代理设计模式
- 基于Java的代理设计模式
- java设计模式之(代理)Proxy
- java设计模式-代理模式
- JAVA设计模式之代理模式(转)
- 基于Java的代理设计模式
- 深入浅出基于Java的代理设计模式
- Java设计模式:单态模式,工厂模式,代理模式,观察者模式示例
- Java设计模式之计数代理模式
- Java设计模式:Proxy(代理)
- GoF的设计模式是Java基础知识和J2EE框架知识之间一座隐性的"桥"
- 深入浅出基于Java的代理设计模式
- JAVA设计模式之代理模式
- Java设计模式:Proxy(代理)
- 设计模式:用Java动态代理实现AOP
- Java设计模式-----Proxy模式(静态代理)
- Java设计模式-----Proxy模式(动态代理)
- Java设计模式之虚拟代理模式
- JAVA 设计模式 代理Proxy模式 一
- java设计模式_代理模式_动态代理(带例子)