JAVA设计模式之六代理模式

来源:互联网 发布:note5网络锁 编辑:程序博客网 时间:2024/06/08 14:57

                                        JAVA设计模式之六代理模式

一代理模式:为其他对象【被代理者】提供一种代理【代理者】 以控制对这个对象【控制对被代理者】的访问。【代理者可以作任何东西的接口:网络连接、内存中的大物件、档案或其它昂贵或无法复制的资源。】

二UML类图:


Subject类:定义了RealSubject和Proxy的共用接口,这样就可以在任何使用RealSubject的地方都可以用Proxy。  【就是代理的接口里边包含具体被代理什么的方法    代理者Proxy 和真正的被代理者RealSubject都实现这个接口】

RealSubject类:定义Proxy所代表的真实实体。  【真正的被代理者对象】

Proxy类:保存一个引用使得代理可以访问实体,并提供一个与Subject的接口相同的接口,这样代理就可以用来替代实体。【里边创建被代理者的实体,,控制被代理者调用   该被代理者重写代理接口的方法】

Subject

public abstract class Image {      抽象类有个展示图片的方法      public abstract void displayImage();     //被代理执行的动作}

RealSubject类具体被代理者

public class RealImage extends Image {      private String filename;      public RealImage(String filename) {    //具体被代理者的构造方法        this.filename = filename;          loadImageFromDisk();         //创造后就调用被代理者独有的方法    }         private void loadImageFromDisk() {     //被代理者独有的方法                      System.out.println("Loading   " + filename);      }  @Override  //被代理者重新写 代理接口   让代理者去办的动作方法等待代理者 控制被代理者调用 public void displayImage() {               System.out.println("Displaying " + filename);   }  } 

Proxy

public classProxyImage extends Image {     private String filename;     private Image image;     public ProxyImage(String filename) {     //代理者的构造方法        this.filename = filename;       }     @Override     public void displayImage() {            //代理者重写    抽象代理类要去代理的方法,,创建具体被代理者  调用它的具体被执行的方法        if(image == null)             image = newRealImage(filename);         image.displayImage();     } }  

客户端代码:

public class ProxyClient {      public static void main(String[] args) {          //利用多态创建   被代理抽象类的具体  代理者    具体代理者 里边创建被代理者的实体  并控制这个对象调用具体被代理的方法        Image mImage1 = new ProxyImage("Andy.Photo1");          Image mImage2 = new ProxyImage("Andy.Photo2");                    mImage1.displayImage();          mImage2.displayImage();      }  }  

使用场景:

第一:远程代理,也就是为一个对象在不同的地址空间提供局部代表,这样可以隐藏一个对象存在于不同地址空间的事实。

第二:虚拟代理,是根据需要创建开销很大的对象,通过它来存放实例化需要很长时间的真实对象。

第三:安全代理,用来控制真实对象访问时的权限。

第四:智能引用,是指当调用真实对象时,代理处理另外一些事。本文的例子就是采用了这一点。






原创粉丝点击