美文网首页设计模式专题
设计模式-原型模式

设计模式-原型模式

作者: RUMyCola | 来源:发表于2022-08-31 06:51 被阅读0次

设计模式-原型模式

定义

原型模式(Prototype Pattern)是指原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象,属于创建型模式。

原型模式的核心在于拷贝原型对象。以系统中已存在的一个对象为原型,直接基于内存二进制流进行拷贝,无需再经历耗时的对象初始化过程(不调用构造函数),性能提升许多。当对象的初始化过程比较耗时时,可以利用当前系统已存在的对象做为原型,对其进行克隆(一般是基于内存二进制流)来躲避初始化过程,使得新对象的创建时间大大减少。

原型模式主要使用场景:

1、类初始化消耗资源较多;

2、new产生的一个对象需要非常繁琐的过程(数据准备、访问权限等);

3、构造函数比较复杂;

4、循环体中产生大量对象时。

在Spring中,原型模式应用的非常广泛。例如scope="prototype",在我们经常用的JSON.parseObject()也是一种原型模式。

优点

1、性能良好,Java自带的原型模式是基于内存二进制流的拷贝,比直接new一个对象性能上提升了许多。

2、可以使用深克隆方式保存对象的状态,使用原型模式将对象复制一份并将其状态保存起来, 简化了创建对象的过程,以便在需要的时候使用(例如恢复到历史某一状态),可付诸实现撤销操作。

缺点

1、需要对每一个类配置一个克隆方法;

2、克隆方法位于类的内部,当对已有类进行改造的时候,需要修改代码,违反了开闭原则

3、在实现深克隆时需要编写较为复杂的代码,而且当对象之间存在多重嵌套引用时,为了实现深克隆,每一层对象对应的类都必须支持深克隆,实现起来会比较麻烦。因此,深、浅拷贝需要运用得当。

代码实例

原型模式:注意区别浅克隆和深克隆,往往使用序列化来实现深克隆. 测试浅克隆和深克隆~

扩展

因为深拷贝使用了序列化机制,序列化机制会破坏单例模式.

解决方案:要么单例类不实现Cloneable接口,要么重写clone()方法,在clone方法中返回单例对象即可,如下:

重写clone()方法,在clone方法中返回单例对象

相关文章

网友评论

    本文标题:设计模式-原型模式

    本文链接:https://www.haomeiwen.com/subject/ihblnrtx.html