原型模式
原型模式是为了更方便创建相类似的对象的一种创造型模式,使用原有的对象通过克隆(深或浅)获得新的对象
使用情况
在创建新对象成本较大
一般结构如下:

Java语言的实现
浅克隆~
java语言的所有对象继承自java.lang.Object,在Object类中提供了一个clone方法,可以将一个java对象克隆一份。需要注意的是,能够实现克隆的类必须实现一个标记接口Cloneable,表示该类的对象支持被复制。在没有实现接口的前提下调用clone方法,java编译器会抛出一个CloneNotSupported的异常
一般而言,java的clone()须满足下面条件
a.克隆对象与原型对象不是同一个对象
b.类型一样
c.equals()方法返回true
PS:在覆盖的clone()方法必须调用父类的clone()方法(super.clone())

使用clone()方法只能达到浅克隆的效果,返回的对象之中的引用类型指向的是同一块内存
深克隆~
在深克隆中,无论原型对象的成员变量的值还是引用类型,都将复制一份给克隆对象
在java中,深克隆通过序列化和反序列化实现(序列化Serialization就是将对象写入流的过程),写入流中的对象是原有对象的一个复制品,原有对象依然存在内存中,所以,将写入的对象再从流里面读出来,就可以实现深克隆
能够实现序列化的对象,其类都必须实现Serializable接口
假似有一个类A和一个类B,A依赖于B,在需要进行A的深克隆时~~看代码

1 import java.io.*;
2 //A and B must implement Serializable
3 class A implements Serializable{
4 B b = new B();
5 public A deepClone throws IOException,ClassNotFountException,OptionalDataException{
6 ByteArrayOutputStream bao = new ByteArrayOutputStream();
7 ObjectOutputStream oos = new ObjectOutputStream(bao);
8 oos.writeObject(this);
9 ByteArrayInputStream bai = new ByteArrayInputStream();
10 ObjectInputStream ois = new ObjectOutputStream(bai);
11 A newA = (A)ois.readObject();
12 ois.close();
13 bai.close();
14 oos.close();
15 bao.close();
16 return newA;
17 }
18 }
19 class B implements Serializable{
20 }
21 //test
22 public class Test {
23 public static void main(String[] args){
24 boolean test;
25 A oldA,newA = null;
26 oldA = new A();
27 try{
28 newA = oldA.deepClone();
29 }catch(Exception e){
30 System.out.println("Error");
31 }
32 test=oldA.b==newA.b?false:true;
33 System.out.println(test);
34 }
35 }
原型管理器
存放多个已存在的对象进行管理,相当于创建对象时使用的模板管理器
一般原型管理器有一个键值对表,及get set方法,将需要作为模板的对象通过键值对表保存
来源:https://www.cnblogs.com/toddy-bear/p/3385585.html
