JavaProxy模式
本文最后更新于:1 年前
1 - Printer和PrinterProxy的共同接口
public interface Printable {
public abstract void setPrinterName(String name);
public abstract String getPrinterName();
public abstract void print(String string);
}
2 - 表示带名字的打印机类(本人)
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);
}
private void heavyJob(String msg) {
System.out.print(msg);
for (int i = 0; i < 5; i++) {
try {
Thread.sleep(1000);
}catch (InterruptedException ignored) {
}
System.out.print('.');
}
System.out.println("结束!");
}
}
3 - 表示带名字的打印机类(代理人)
public class PrinterProxy implements Printable{
private String name;
private Printer real;
public PrinterProxy(){}
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);
}
}
}
4 - 测试程序行为的类
public class Main {
public static void main(String[] args) {
Printable p = new PrinterProxy("Alice");
System.out.println("现在名字是" + p.getPrinterName() + ".");
p.setPrinterName("Bob");
System.out.println("现在名字是" + p.getPrinterName() + ".");
p.print("Hello, world.");
}
}
5 - 输出示例
现在名字是Alice.
现在名字是Bob.
正在生成Printer的实例(Bob).....结束!
===Bob===
Hello, world.
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!