第二十章 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();}}}
}