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 }

 

posted on 2014-08-12 15:53  wangwangheng  阅读(300)  评论(0编辑  收藏  举报