读书笔记之代理模式

来源:互联网 发布:天下三男号捏脸数据 编辑:程序博客网 时间:2024/06/12 07:17

即一个类代表另一个类的功能,这种类型的模式属于结构型模式,在代理模式中,我们创建现有对象的对象,以便向外界提供功能接口
为什么要使用代理模式?
在面向对象系统中,有些对象由于某些原型(例如对象创建开销很大,或者某些操作需要安全控制),直接去访问的话就会带来狠得多麻烦,我们可以在访问此对象时加上一个对此对象的访问层.
将一个直观的例子,你去夜总会找妹纸,从来都不是直接找到那个妹纸的吧,必须要先找阿姨才行,这个阿姨就是代理对象。
应用实例:windows的快捷方式,火车票代售点。
优点:职责清晰,高扩展,智能化
缺点:由于在客户端和主体之间设置了代理对象,可能造成请求的处理速度变慢;实现代理需要额外的工作,有些代理模式的实现非常复杂
注意事项:和适配器模式的区别在于适配器考虑改变对象的接口,而抽象模式不允许;装饰者模式在于增强功能,而代理模式是为了加强控制

代码演示:
1.创建image接口

public interface Image{ void display();}

2.实现image接口

public class RealImage implements Image {   private String fileName;   public RealImage(String fileName){      this.fileName = fileName;      loadFromDisk(fileName);   }   @Override   public void display() {      System.out.println("Displaying " + fileName);   }   private void loadFromDisk(String fileName){      System.out.println("Loading " + fileName);   }}

3.代理类

public class ProxyImage implements Image{   private RealImage realImage;   private String fileName;   public ProxyImage(String fileName){      this.fileName = fileName;   }   @Override   public void display() {      if(realImage == null){         realImage = new RealImage(fileName);      }      realImage.display();   }}

4.测试

public class ProxyPatternDemo {   public static void main(String[] args) {      Image image = new ProxyImage("test_10mb.jpg");      //图像将从磁盘加载      image.display();       System.out.println("");      //图像将无法从磁盘加载      image.display();     }}

proxyImage是一个代理类,减少了realImage对象加载内存的占用

阅读全文
0 0