*
*/
package patterns.proxy;
/**
* @author zhouushe
*
*/
public interface Printable {
public abstract void setprinterName(String name);
public abstract String getPrinterName();
public abstract void print(String string);
}
=================================================================================================
package patterns.proxy;
/**
* @author zhouushe
*
*/
public class Printer implements Printable {
private String name;
public Printer() {
this.heavyJob("Be producing object instance...");
}
public Printer(String name){
this.name = name;
this.heavyJob("Be producing object instance " + this.name + "...");
}
/*
* (non-Javadoc)
*
* @see patterns.proxy.Printable#setprinterName(java.lang.String)
*/
@Override
public void setprinterName(String name) {
this.name = name;
}
/*
* (non-Javadoc)
*
* @see patterns.proxy.Printable#getPrinterName()
*/
@Override
public String getPrinterName() {
return this.name;
}
/*
* (non-Javadoc)
*
* @see patterns.proxy.Printable#print(java.lang.String)
*/
@Override
public void print(String string) {
System.out.println("=== " + this.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 e) {
e.printStackTrace();
}
System.out.print(".");
}
System.out.println("Finish...");
}
}
=================================================================================================
package patterns.proxy;
/**
* @author zhouushe
*
*/
public class PrinterProxy implements Printable {
private String name;
private Printer real;
public PrinterProxy() {
}
public PrinterProxy(String name) {
this.name = name;
}
/*
* (non-Javadoc)
*
* @see patterns.proxy.Printable#setprinterName(java.lang.String)
*/
@Override
public synchronized void setprinterName(String name) {
if (this.real != null) {
this.real.setprinterName(name);
}
this.name = name;
}
/*
* (non-Javadoc)
*
* @see patterns.proxy.Printable#getPrinterName()
*/
@Override
public String getPrinterName() {
// TODO Auto-generated method stub
return this.name;
}
/*
* (non-Javadoc)
*
* @see patterns.proxy.Printable#print(java.lang.String)
*/
@Override
public void print(String string) {
this.realize();
this.real.print(string);
}
private synchronized void realize() {
if (this.real == null) {
this.real = new Printer(this.name);
}
}
}
=================================================================================================
package patterns.proxy;
/**
* @author zhouushe
*
*/
public class Main {
public static void main(String[] args) {
Printable p = new PrinterProxy("Alice");
System.out.println("Current name is: " + p.getPrinterName() + ".");
p.setprinterName("Bob");
System.out.println("Current name is: " + p.getPrinterName() + ".");
p.print("Hello, World!");
}
}