1、主要解决的问题:
客户端代码和实现代码的解耦合,代理类对实现类打理一切
真正干活的那个类是要对客户端隐藏的
代理类和实现类一般都会实现同一个接口(也可以不这么干)
代理设计模式(Proxy)和状态模式(State)很类似,代理模式是状态模式的一种特例
一个代理模式下的代理类一般只对应一个实现类;而一个状态模式下的代理类一般对应多个实现类
代理模式主要目的是控制对实现类的访问
状态模式主要目的是可以动态改变实现类
2、插图
插图以及UML图(Astah/jude) http://pan.baidu.com/s/1pJylLG3
3、代码实现示例
接口
1 package com.xinye.test.proxy; 2 /** 3 * 4 * @author xinye 5 * 6 */ 7 public interface IProxy { 8 void method1(); 9 void method2(); 10 void method3(); 11 }
实现类:
1 package com.xinye.test.proxy; 2 /** 3 * 被代理类 4 * @author xinye 5 * 6 */ 7 public class ProxyImpl implements IProxy { 8 9 @Override 10 public void method1() { 11 System.out.println(getClass().getSimpleName() + " method1() invoke"); 12 } 13 14 @Override 15 public void method2() { 16 System.out.println(getClass().getSimpleName() + " method2() invoke"); 17 } 18 19 @Override 20 public void method3() { 21 System.out.println(getClass().getSimpleName() + " method3() invoke"); 22 } 23 24 }
代理类:
1 package com.xinye.test.proxy; 2 /** 3 * 代理类 4 * @author xinye 5 * 6 */ 7 public class Proxy implements IProxy { 8 // 被代理的对象 9 private IProxy impl; 10 11 public Proxy(){ 12 impl = new ProxyImpl(); 13 } 14 15 @Override 16 public void method1() { 17 impl.method1(); 18 } 19 20 @Override 21 public void method2() { 22 impl.method2(); 23 } 24 25 @Override 26 public void method3() { 27 impl.method3(); 28 } 29 30 }
客户端代码:
1 package com.xinye.test.proxy; 2 /** 3 * 4 * @author xinye 5 * 6 */ 7 public class Client { 8 public static void main(String[] args) { 9 Proxy proxy = new Proxy(); 10 11 proxy.method1(); 12 proxy.method2(); 13 proxy.method3(); 14 } 15 }