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(); } }
使用场景:
第一:远程代理,也就是为一个对象在不同的地址空间提供局部代表,这样可以隐藏一个对象存在于不同地址空间的事实。
第二:虚拟代理,是根据需要创建开销很大的对象,通过它来存放实例化需要很长时间的真实对象。
第三:安全代理,用来控制真实对象访问时的权限。
第四:智能引用,是指当调用真实对象时,代理处理另外一些事。本文的例子就是采用了这一点。
阅读全文
0 0
- JAVA设计模式之六代理模式
- 浅析JAVA设计模式之代理模式(六)
- 设计模式之(六)代理模式Proxy
- 设计模式之六:代理模式
- 设计模式系列之六:代理模式
- 设计模式之六:代理模式
- 设计模式(六)---代理模式
- 【设计模式】【六】代理模式
- 设计模式(六)之 Proxy(代理)
- 六 设计模式之代理模式(或称委托模式)
- Java设计模式之代理设计模式
- Java设计模式(六) 代理模式 VS. 装饰模式
- Java设计模式(六) 代理模式 vs. 装饰模式
- java设计模式之六
- Java设计模式之代理
- Java设计模式之代理
- java设计模式之代理
- java之代理设计模式
- echarts 横向占比条状图
- CPU的频率
- Spring_SSH整合之_架构的历史(两层架构整合JSP+MySQL)_1
- MVVM模式中ViewModel和View、Model有什么区别
- memset函数
- JAVA设计模式之六代理模式
- float 与零值比较之所以然
- 1.线性表之顺序表与链表
- iText html转pdf
- jmeter定时器
- 点击展示/收起Animation
- iOS中集成ijkplayer视频直播框架
- python 发送邮件
- The app icon set named "AppIcon" did not have any applicable content.