设计模式-原型模式

说原型模式之前我们先带着几个问题去看

什么是原型模式

什么是深复制和浅复制

深复制浅复制跟传递类型的关系

值类型和应用类型的异同

堆和栈

什么是原型模式

原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据库调用。

什么是深复制浅复制

原型模式的复制涉及到了深复制和浅复制的概念。原型的复制可以理解为实例化,比如我们new三次复制了三个对象,但是这样面临了一个问题,就是如果我们初始化的构造函数很长,实例化的次数多,那么我们的效率就很低下了。那么我们怎样解决这个问题呢?
Test test1 = new Test();
Test test2 = test1;
Test test3 = test1;

这样写其实时传引用而不是传值,这样就是相当于在test2上写着请看test1一样没有实际内容,如果我改变了一个对象会影响其他的对象,这样做不符合我的要求,然后我们就涉及到了克隆方法的深复制和浅复制问题了。

1)浅拷贝是指源对象与拷贝对象共用一份实体,仅仅是引用的变量不同(名称不同)。对其中任何一个对象的改动都会影响另外一个对象。
举个例子,一个人叫张三,是个经理,但是在单位大家叫他张经理,但是无论是张三还是张经理都是同一个人,然后一天张三升职了变总经理了,张经理变张总了,那么无论是之前的张经理还是张三现在职位都是总经理了。
设计模式-原型模式
设计模式-原型模式
2) 深复制是把要复制的对象和引用的对象都复制了一遍。每复制一个就开辟一个新的空间给他。深复制引用对象的变量指向复制过来的新对象,而不是原有的被引用的对象。
设计模式-原型模式