博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二十一、proxyDesign 代理模式
阅读量:6321 次
发布时间:2019-06-22

本文共 1989 字,大约阅读时间需要 6 分钟。

原理:

时序图:

 

 代码清单:

Printable

public interface Printable {    void setPrinterName(String name);    String getPrinterName();    void print(String string);}

PrintProxy

public class PrinterProxy implements Printable{    private String name;    private Printer real;    public PrinterProxy(String name){        this.name = name;    }    @Override    public synchronized void setPrinterName(String name) {        if(real != null){            real.setPrinterName(name);        }        this.name = name;    }    @Override    public String getPrinterName() {        return name;    }    @Override    public void print(String string) {        realize();        real.print(string);    }    private synchronized void realize(){        if(real == null){            real = new Printer(name);        }    }}

Printer

public class Printer implements Printable{    private String name;    public Printer(){        heavyJob("正在生成printer 实例");    }    public Printer(String name){        this.name = name;        heavyJob("正在生成printer 实例"+name);    }    @Override    public void setPrinterName(String name) {        this.name = name;    }    @Override    public String getPrinterName() {        return name;    }    @Override    public void print(String string) {        System.out.println("===="+name+"====");        System.out.println(string);    }    public void heavyJob(String msg){        System.out.println(msg);        for(int i=0;i<5;i++){            try{                Thread.sleep(1000);            }catch (InterruptedException e){                e.printStackTrace();            }            System.out.print(".");        }        System.out.println("结束");    }}

Main

public class Main {    public static void main(String[] args){        Printable p = new PrinterProxy("A1");        System.out.println("现在的名字:"+p.getPrinterName());        p.setPrinterName("B1");        System.out.println("现在的名字:"+p.getPrinterName());        p.print("你好");    }}

 

转载于:https://www.cnblogs.com/baizhuang/p/10552237.html

你可能感兴趣的文章
为什么要阅读——兼分享《首先,打破一切常规》[中译文]:世界顶级管理者的成功秘诀/(美)马库斯&#183;白金汉,(美)柯特&#183;科夫曼 著...
查看>>
012——VUE中todos示例讲解class中应用表达式
查看>>
Android 沉浸式状态栏 实现方式二 ( 更简单 )
查看>>
更改已经签名的app中的内容
查看>>
性能测试十大误区
查看>>
PHP中使用cURL实现Get和Post请求的方法
查看>>
ASP.NET MVC是如何运行的[2]: URL路由
查看>>
30款顶级CSS工具及应用-CSDN.NET
查看>>
自定义安装Apache+php+mysql网站服务器环境
查看>>
JAVA nio 2 定义 Path 类
查看>>
ubuntu12.04 安装配置jdk1.7
查看>>
修改tomcat服务器默认端口号
查看>>
bootstrap-datetimepicker 进一步跟进~~~开始时间和结束时间的样式显示
查看>>
idea创建maven-archetype-webapp项目无java目录
查看>>
《 Oracle查询优化改写 技巧与案例 》电子工业出版社
查看>>
关系型数据库种类
查看>>
ajax回调函数中使用$(this)取不到对象的解决方法
查看>>
java实现折半排序算法
查看>>
1024程序员节,向改变世界的程序员致敬
查看>>
还在呼吸致命空气?专业的斐讯空气检测仪,让你生活更健康!
查看>>