介绍
我理解的原型,即所有使用原型对象的地方,都是使用的原型对象的拷贝,所有使用的地方都是拿到原型对象的当前状态.
解决问题: 创建重复对象,同时保证性能.
UML图

代码
原型接口
    public interface Prototype<T> extends Cloneable {
        T clone();
    }
原型模式类
      public class ConcretePrototype implements Prototype<ConcretePrototype> {
          public ConcretePrototype clone() {
              try {
                  return (ConcretePrototype) super.clone();
              } catch (CloneNotSupportedException e) {
                  e.printStackTrace();
              }
              return null;
          }
      }
使用者
  public class Client {
    public static void main(String[] args) {
        Prototype<ConcretePrototype> concretePrototype = new ConcretePrototype();
        Prototype<ConcretePrototype> cloneObj = concretePrototype.clone();
        System.out.println(concretePrototype == cloneObj);
        System.out.println(concretePrototype.getClass().equals(cloneObj.getClass()));
      }
    }        
其他
当实现了 Cloneable 接口后, JVM 对于clone() 方法的默认实现是, 对基本类型深度拷贝, 其他类对象都是只拷贝了对象引用.所以如果需要实现完全深度拷贝的话,需要自己手动拷贝.例如:
    public class Example implements Cloneable {
        private ArrayList<String> list;
        @Override
        public Example clone() throws CloneNotSupportedException {
                Example cloneObj = (Example)super.clone();
                cloneObj.list = (ArrayList<String>) list.clone();
                return cloneObj;
        }
    }
参考
http://www.cnblogs.com/zxy562323273/p/3559832.html
http://www.cnblogs.com/java-my-life/archive/2012/04/11/2439387.html
