读书笔记之代理模式

xiaoxiao2021-02-28  129

即一个类代表另一个类的功能,这种类型的模式属于结构型模式,在代理模式中,我们创建现有对象的对象,以便向外界提供功能接口 为什么要使用代理模式? 在面向对象系统中,有些对象由于某些原型(例如对象创建开销很大,或者某些操作需要安全控制),直接去访问的话就会带来狠得多麻烦,我们可以在访问此对象时加上一个对此对象的访问层. 将一个直观的例子,你去夜总会找妹纸,从来都不是直接找到那个妹纸的吧,必须要先找阿姨才行,这个阿姨就是代理对象。 应用实例: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对象加载内存的占用

转载请注明原文地址: https://www.6miu.com/read-20330.html

最新回复(0)