有些对象的创建过程很复杂,或者很耗费性能(如创建过程中需要频繁的访问数据库,读文件等),有没有什么方法可以优化这个对象的创建过程??
有,就是复制一个一摸一样的对象,从而略过对象的创建过程。这个就是今天要和大家介绍的原型模式!
正式介绍原型模式之前先和大家介绍两个概念:
浅拷贝:使用一个已知实例对新创建实例的成员变量逐个赋值
深拷贝:当一个类的构造方法,不仅要复制对象的所有非引用成员变量值,还要为引用类型的成员变量创建新的实例,并且初始化为形式参数实例值。
对于浅拷贝当对象的成员变量是基本数据类型时,两个对象的成员变量已有存储空间,赋值运算传递值,所以浅拷贝能够复制实例。但是当对象的成员变量是引用数据类型时,就不能实现对象的复制了。而深拷贝对对象内部的引用均复制,它是创建一个新的实例,并且复制实例。
所谓原型模式就是用原型实例指定创建对象的类型,并且通过复制该原型实例创建新的对象。
原型的优点:
向客户隐藏制造新实例的复杂性;
提供让客户能够产生位置类型对象的选项;
性能提高。
原型的缺点:
在实现深克隆的时候可能需要比较复杂的代码。
需要为每一个类配备一个克隆方法,而且这个克隆方法需要对类的功能进行通盘考虑,这对全新的类来说不是很难,但对已有的类进行改造时,不一定是件容易的事,必须修改其源代码,违背了“开闭原则”。