public class Main
{
public static void main(String[] args)
{
PrinterProxy p = new PrinterProxy("Alice");
System.out.println(p.getPrinterName());
p.setPrinterName("Bob");
System.out.println(p.getPrinterName());
p.print("Hello, world.");
}
}
interface Printable
{
public abstract void setPrinterName(String name);
public abstract String getPrinterName();
public abstract void print(String string);
}
class Printer implements Printable
{
private String name;
public Printer()
{
heavyJob("Printer");
}
public Printer(String name)
{
this.name = name;
heavyJob("Printer()" + name);
}
public void setPrinterName(String name)
{
this.name = name;
}
public String getPrinterName()
{
return name;
}
public void print(String string)
{
System.out.println("=== " + name + " ===");
System.out.println(string);
}
private void heavyJob(String msg)
{
System.out.println(msg);
for (int i = 0; i < 5; i++)
{
try
{
Thread.sleep(1000);
}
catch (InterruptedException e)
{
}
System.out.print(".");
}
}
}
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);
}
}
}
代理模式【PROXY PATTERN】
最新推荐文章于 2025-09-16 12:13:21 发布
本文通过一个简单的Java程序演示了代理模式的应用。程序定义了一个打印接口和实现该接口的真实打印类及代理类。代理类在调用真实打印类之前可以进行额外的操作。
225

被折叠的 条评论
为什么被折叠?



