设计模式之(5)——原型模式

上篇文章中我们提到单例模式可以避免重复创建消耗资源的对象,但是却不得不共用对象。若是对象本身也不让随意访问修改时,怎么办?那么我们就可以采用原型模式来创建新的实例。

定义:原型模式用来创建重复对象,当直接创建对象的代价比较大的时候可以采用这种模式,这种模式实现了一个原型接口,这个接口用于创建当前对象的克隆,同时又能保证性能,属于一种创建型模式;

意图:用原型对象指定要创建对象的类型,并通过拷贝原型对象来创建新的对象;

主要解决:在直接创建对象代价比较大的时候采用这种模式;

关键代码:1、实现克隆Cloneable接口,重写Object中的clone方法,通过实现对象的浅拷贝或者通过序列化和反序列化来实现对象的深拷贝;2、原型模式同样用于隔离对象的使用者和具体类型之间的耦合关系,它同样要求这些”易变类”拥有稳定的接口;

应用实例:1、细胞分裂;

优点:1、性能提高;2、逃避构造函数的约束;

缺点:1、配备克隆方法需要对类的功能进行全面考虑,对于全新的类并不难,但是对于已有的类却不容易,例如引用中含有循环结构的时候;2、必须实现clone接口;

使用场景:1、资源优化场景,类的初始化需要消耗非常多的资源的时候,包括数据和硬件资源;2、性能和安全要求的场景;3、通过new产生一个对象需要非常频繁地数据准备或者权限访问的时候;4、一个对象提供给其他对象访问,而各个调用者都可能需要对其进行修改的时候;5、通常和工厂方法一起出现,通过原型模式创建对象,然后由工厂方法提供给调用者;

UML类图:

设计模式之(5)——原型模式

以上代码中采用了浅拷贝调用super.clone()方法来实现原型模式,被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用都仍然指向原来的对象,这就是浅拷贝,当然也可以采用序列化和反序列化来实现深拷贝通过原型对象生成目标对象,代码如下:

深拷贝是通过流来生成对象的,生成的对象就和原型对象完全是两个对象啦。

Original: https://www.cnblogs.com/wha6239/p/16642206.html
Author: 一只烤鸭朝北走
Title: 设计模式之(5)——原型模式

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/612884/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球