设计模式学习笔记之原型模式

本贴最后更新于 2010 天前,其中的信息可能已经事过境迁

前言

这是一篇学习笔记,内容很多是来源于网上的资料,按照自己学习情况进行的总结。
我的个人博客:海加尔金鹰

什么是原型模式

原型模式:通过已有的实例对象进行复制来创建新的相同对象。
特点:

  • 1 必须已经有一个实例对象存在。
  • 2 通过原型模式创建的对象避免了构造器的约束,即不会调用构造器。
  • 3 通过原型模式创建的对象和原始的对象属性值是一样的。

原型模式的实现

核心结构

 (1)Prototype(抽象原型类):声明克隆方法的接口,是所有具体原型类的公共父类,它可是抽象类也可以是接口,甚至可以是具体实现类。
(2)ConcretePrototype(具体原型类):它实现抽象原型类中声明的克隆方法,在克隆方法中返回自己的一个克隆对象。
(3)Client(客户端):在客户类中,让一个原型对象克隆自身从而创建一个新的对象。1

核心代码

1 实现 Cloneable 接口
2 clone()方法 在 java 当中 Object 类种就有 clone()方法

浅克隆和深克隆

浅克隆:当原型对象被复制时,只复制它本身和其中包含的值类型的成员变量,而引用类型的成员变量并没有复制。
深克隆:除了对象本身被复制外,对象所包含的所有成员变量也将被复制。1
深克隆与浅克隆的区别就是,浅克隆不会克隆原对象中的引用类型,仅仅拷贝了引用类型的指向。深克隆则拷贝了所有。也就是说深克隆能够做到原对象和新对象之间完全没有影响。2
具体实现代码及相关验证:见末尾网上资料

原型模式的优缺点及应用场景

优缺点

优点:
(1):提高性能,简洁代码。
(2):避免了构造器的约束。
注:查找资料时看到还有一些其他的优点,但是这两点给我最直观的感受。
缺点:
(1):需要为每一个类配置一个克隆方法,而且该克隆方法位于类的内部,当对已有类进行改造的时候,需要修改代码,违反了开闭原则。1
(2):在实现深克隆时需要编写较为复杂的代码,而且当对象之间存在多重签到引用时,为了实现深克隆,每一层对象对应的类都必须支持深克隆,实现起来会比较麻烦。1
(3):由于使用原型模式复制对象时不会调用类的构造方法,所以原型模式无法和单例模式组合使用。3

应用场景

  1. 创建新对象成本比较大。
  2. 一个对象有多个修改人。
  3. 对对象的状态进行记录。

这周过的心惊胆战啊,地震很吓人啊。


  1. 设计模式原型模式:https://www.cnblogs.com/songyaqi/p/PrototypePattern.html

  2. 浅克隆和深克隆的区别:https://blog.csdn.net/jeffleo/article/details/76737560

  3. Java 设计模式之原型模式的优点及缺点讲解:https://www.2cto.com/kf/201802/717717.html

  • 设计模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

    200 引用 • 120 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...