首页 > 代码库 > 代理设计模式

代理设计模式

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     @Override10     public void method1() {11         System.out.println(getClass().getSimpleName() + " method1() invoke");12     }13 14     @Override15     public void method2() {16         System.out.println(getClass().getSimpleName() + " method2() invoke");17     }18 19     @Override20     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     @Override16     public void method1() {17         impl.method1();18     }19 20     @Override21     public void method2() {22         impl.method2();23     }24 25     @Override26     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 }