天天看点

大话设计模式之原型模式  原型模式

 用原型实例制定创建对象的种类,并通过拷贝这些原型,创建新的对象。

 就是从一个对象在创建另一个可定制的对象,而且不需要知道任何创建的细节。

(1)、实现Cloneable接口,可以使用此接口的类上使用clone方法。

(2)、重写Object类中的clone方法,因为所有类的父类是Object类,Object有一个clone方法,作用是返回对象的一个拷贝,但是其作用域protected类型的,一般的类无法调用,因此,将clone改为public类型。

大话设计模式之原型模式  原型模式

 代码实现:

  客户端代码:

  这就是简单复制。一般在初始化的信息不发生变化的情况下,科隆市最好的办法,这既隐藏了对象创建的细节,有对性能是大大的提高。 使用原型模式创建对象比直接new一个对象在性能上要好的多,因为Object类的clone方法是一个本地方法,它直接操作内存中的二进制流,特别是复制大对象时,性能的差别非常明显。

 Object类的clone方法只会拷贝对象中的基本的数据类型,对于数组、容器对象、引用对象等都不会拷贝,这就是浅拷贝。如果要实现深拷贝,必须将原型模式中的数组、容器对象、引用对象等另行拷贝。

 这里指谈谈引用对象的深复制:

 需要解决的代码:

  运行结果:

大话设计模式之原型模式  原型模式

 而实际上,我们需要的是不一样的。

 修改代码:

  客户端代码不变。

 运行结果:

大话设计模式之原型模式  原型模式

 得到预期结果。

 其实,我们使用原型模式,简单的说我们就是简化对象的创建。

继续阅读