Proxy - 代理模式

概述:

只在必要的时候生成实例,不对实例尽行增强

Proxy_sample

说明:

1.本文仅仅是对 图解设计模式 的简单总结(个人笔记).
2.文章中的图片均来自本书,添加水印只是为了防止盗链行为,并无侵权的想法.
综上,若侵权, 请联系删除!
转载请标注出处!


案例:

  • 案例说明:

    示例程序实现了一个带名字的打印机(将名字显示到界面上)

  • Proxy_uml_case
  • 主要代码:
  • 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_sentense
  • 代码链接:传送门

    uml综述Proxy_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: 欢迎大家来到我的小站,鸣谢!