设计模式之proxy代理-精简不浪费

二十一、proxy代理 要用再建立

public interface Printable {
    void setPrintName(String name);
    String getPrintname();
    void prints(String string);
}
public class Printer implements Printable {
    private String name;
    public Printer(String name){
        heavyJob("正在产生printer的对象实例");
    }

    public Printer() {
        heavyJob("正在产生printer的对象实例"+name);
    }

    private void heavyJob(String string) {

    }

    @Override
    public void setPrintName(String name) {
        this.name=name;
    }

    @Override
    public String getPrintname() {
        return name;
    }

    @Override
    public void prints(String string) {
        System.out.println("==="+name+"===");
        System.out.println(string);
        for (int i = 0; i < 5; i++) {
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(".");
        }
        System.out.println("完成");
    }
}
public class PrinterProxy implements Printable{
    private String name;
    private Printer real;

    public PrinterProxy() {
    }

    public PrinterProxy(String name) {
        this.name = name;
    }

    @Override
    public synchronized void setPrintName(String name) {
        if (real!=null){
            real.setPrintName(name);
        }
        this.name=name;
    }

    @Override
    public String getPrintname() {
        return name;
    }

    @Override
    public void prints(String string) {
        if (real==null){
            real=new Printer(name);
        }
    }
}
public class Test {
    public static void main(String[] args) {
        Printable joanna = new PrinterProxy("joanna");
        System.out.println("现在的名称是"+joanna.getPrintname()+".");
        joanna.setPrintName("zhouzhou");
        System.out.println("现在的名称你如果是"+joanna.getPrintname()+".");
        joanna.prints("helloworld");
    }
}

你可能感兴趣的:(设计模式)