23种设计模式-原型模式

1.产生背景

  • 为什么需要原型模式

与其它创建型模式不同,原型模式不是在他们的基础上的改进;

2.概念

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

本质: 通过一个原始对象为模版,克隆出更多一模一样的对象;

在java中就是clone方法;

3.目的

提高效率、绕过构造方法、使用方便

4.解决方案

本质:类自身内实现clone方法;先创建一个对象,然后以这个对象为模版,通过这个对象内的clone方法,复制出大量一模一样的对象;

5. 类图

这里写图片描述

6.优缺点

优点:

  • 高性能

通过new进行创建对象时,需要首先获取class信息,计算出所需内存大小,分配内存,赋默认值,执行代码块、执行构造方法初始化 等一系列动作;

而使用clone方法,只需要根据原始对象大小分配内存,然后复制二进制流即可;省去了很多的计算和初始动作;因此性能会较高;

  • 绕过构造方法

这个即是优点,某些情况下可能也是缺点;
如果一个对象的初始化非常消耗性能,比如:通过加载数据库配置,则绕过构造方法会大大提高性能;

  • 使用简单

这也是创建型模式的基本优点,它隐藏了对象创建的内部细节;

最核心的目的:高性能、方便、快速的创建出大量一模一样的对象

缺点:

  • 绕过构造方法

一些必须通过构造方法进行不同初始化的操作将无法执行;

7.应用场景

  • 重复创建相似对象,对象的配置基本不变
  • 对象的构造方法非常消耗资料

8.现实案例

jdk 中的cloneable接口;

9. 注意事项

java中的clone方法,有两种式:深拷贝和浅拷贝;

深拷贝:是指复制的两个对象本身及对象的属性(包括所有递归属性)都是完全全新的对象;在内存是,是两块不同的内存块;

浅拷贝:是指复制的两个对象本身是不同的,但是属性值引用的是同一个对象;即拷贝的是同一个同象的引用;

这里写图片描述

猜你喜欢

转载自blog.csdn.net/yangspgao/article/details/80554608