Proxy - 代理模式
概述:
只在必要的时候生成实例,不对实例尽行增强
说明:
1.本文仅仅是对 图解设计模式 的简单总结(个人笔记).
2.文章中的图片均来自本书,添加水印只是为了防止盗链行为,并无侵权的想法.
综上,若侵权, 请联系我删除!
转载请标注出处!
案例:
- 案例说明:
示例程序实现了一个带名字的打印机(将名字显示到界面上)
- 主要代码:
- PrinterProxy.java
package Gof.Proxy; public class PrinterProxy implements Printable { private String name; // 名字 private Printer real; // “本人” public PrinterProxy() { } public PrinterProxy(String name) { // 构造函数 this.name = name; } public synchronized void setPrinterName(String name) { // 设置名字 if (real != null) { real.setPrinterName(name); // 同时设置“本人”的名字 } this.name = name; } public String getPrinterName() { // 获取名字 return name; } public void print(String string) { // 显示 realize(); real.print(string); } private synchronized void realize() { // 生成“本人” if (real == null) { real = new Printer(name); } } }
- 时序图:
- 代码链接:传送门
uml综述
- Subject(主体): subject角色定义了使用proxy角色和RealSubject角色之间具有一致性的接口.
- Proxy:尽量处理来自client角色的请求,proxy角色只有在必要的时候生成实例,proxy角色实现在Subject角色中定义的接口
- RealSubject(实际主体):会在proxy角色无法胜任角色时登场,同样实现了Subject角色定义的接口
- Client(请求者):使用proxy的角色.
收获:
- 使用代理人提高处理速度
如果我们在需要使用某个功能时才将其初始化,这可以帮助我们改善用户体验
- 代理与委托
代理人只代理他能解决的问题,当遇到他不能解决的问题,就会转交给本人解决,这里转交极为委托
- 题外话:
我们可以利用代理模式,访问首项内容,从某种程度上讲,java中public,private,protected关键字可以通过代理模式实现忽略,访问私有数据,保护数据等…另一方面,static静态变量(通过类加载生成)也可通过代理模式生成多个,因而从一定程度上讲,并不存在所谓的单例模式.
不过话又说回来,每个语言都有自己的优缺点,我们用语言是为了更好的服务程序,作为程序员的我们,为何要没事找事,这样写程序呢? 以上内容仅当做知识点听听极好!
相关设计模式:
- Adapter: Adapter模式适配两种具有不同接口的对象,以使它们可以一同工作,而proxy模式Subject与proxy角色的接口是相同的
- Decorator: Decorator模式使用的目的在于增加新的功能,而proxy模式(可以增加新的功能),更注重于添加代理人以减轻本人工作的负担!
注意:
此部分内容属于对GOF Design Pattern知识的初步认知阶段,参考书籍是结城浩的《图解设计模式》,简单易懂,十分推荐!
以上内容,作者一字一句码出来的,纯属不易,欢迎大家转载,转载是还请您表明出处。另外如果我有侵权行为,请在下方留言,确认后我会及时撤销相应内容,谢谢大家!
PS: 欢迎大家来到我的小站,鸣谢!
猜你喜欢