《图解设计模式》 第九部分 避免浪费

第二十章 Flyweight 模式

public class BigcharFactory{
  //这里对使用到的内容进行了缓存
  private HashMap pool = new HashMap();

  //有则直接取,无则创建并保存到缓存。
  public synchronized BigChar getBigChar(char charname){
    BigChar bc = (BigChar) pool.get("" + charname);
    if(bc == null){
      bc = new BigChar(charname);
      pool.put("" + charname, bc);
    }
    return bc;
  }
}

第二十一章 proxy 模式

其实看看代码,我们会发现,直接使用 Printer 从代码上来讲区别不大但是正如这部分章节所讲的 避免浪费 。Proxy 模式保证了 Printer 对象只有在使用到的时候才初始化。在大型项目中,如果 Printer 是个很耗资源的类,可以起到节省资源的作用。

public class PrinterProxy implements Printable {
    private String name;
    private Printer real;
    private String className;

    public PrinterProxy() {
    }

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

    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) {
            try {
                real = (Printer) Class.forName(className).newInstance();
                real.setPrinterName(name);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}
posted @ 2024-11-05 13:43  大俗XD  阅读(3)  评论(0编辑  收藏  举报