原始模型模式其实就是“克隆”,当我们的系统需要对模型对象(MVC中的M)复制一份的时候非常有用。采取这种模式就免去了我们必须知道一些细节才能实例化。
原始模型模式分为两种两种表现形式:第一种是简单形式,第二种是登记形式,区别无非在于后者有一个管理器。管理器的好处是可以防止重复复制,减少资源浪费。
说到“克隆”就不能不说浅复制和深复制
浅复制(浅克隆)是指只复制当前对象和其基本数据类型的值,对其属性域(字段)的对象引用不复制。如private int i;值会被复制,而private String s;则只是复制了一下引用,两者仍然指向同一个实例,说白了仍然是复制了一下值,只不过复制的是地址值(理解java的值传递就比较容易理解这个)
深复制(深克隆)相反,将对象也复制一份。这里就要小心,是否出现循环的情况。用序列化+io操作可以轻易实现深复制。只需要被复制的对象实现Serializable接口。问题:如果属性域对象没有实现Serializable接口呢?