5 Singleton模式——只有一个实例
6 Prototype模式——通过复制生成实例
6.2 示例程序

包framework
public interface Product extends Cloneable {void use(String s);Product createClone();}public class Manager {private HashMap showcase = new HashMap();public void register(String name, Product proto) {showcase.put(name, proto);}public Product create(String protoname) {Product p = (Product)showcase.get(protoname);return p.createClone();}}
product
public class MessageBox implements Product {private char decochar;public MessageBox(char decochar) {this.decochar = decochar;}@Overridepublic void use(String s) {int length = s.getBytes().length;for (int i = 0; i < length + 4; i++) {System.out.print(decochar);}System.out.println("");System.out.println(decochar + " " + s + " " + decochar);for (int i = 0; i < length + 4; i++) {System.out.print(decochar);}System.out.println("");}@Overridepublic Product createClone() {Product p = null;try {p = (Product)clone();} catch (CloneNotSupportedException e) {e.printStackTrace();}return p;}}public class UnderlinePen implements Product {private char ulchar;public UnderlinePen(char ulchar) {this.ulchar = ulchar;}@Overridepublic void use(String s) {int length = s.getBytes().length;System.out.println("\"" + s + "\"");System.out.print(" ");for (int i = 0; i < length; i++) {System.out.print(ulchar);}System.out.println("");}@Overridepublic Product createClone() {Product p = null;try {p = (Product)clone();} catch (CloneNotSupportedException e) {e.printStackTrace();}return p;}}
使用
public class Main {public static void main(String[] args) {// 准备Manager manager = new Manager();UnderlinePen upen = new UnderlinePen('~');MessageBox mbox = new MessageBox('*');MessageBox sbox = new MessageBox('/');manager.register("strong message", upen);manager.register("warning box", mbox);manager.register("slash box", sbox);// 生成Product p1 = manager.create("strong message");p1.use("Hello, world.");Product p2 = manager.create("warning box");p2.use("Hello, world.");Product p3 = manager.create("slash box");p3.use("Hello, world.");}}
6.3 Protptype模式中的角色

