前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式学习笔记之原型模式

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

作者头像
海加尔金鹰
发布2020-06-09 10:10:51
2570
发布2020-06-09 10:10:51
举报
文章被收录于专栏:海加尔金鹰的专栏

前言

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

什么是原型模式

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

  • 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


标题:设计模式学习笔记之原型模式 作者:海加尔金鹰 地址:https://www.hjljy.cn/articles/2019/06/23/1561303942365.html

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-06-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 什么是原型模式
  • 原型模式的实现
    • 核心结构
      • 核心代码
        • 浅克隆和深克隆
        • 原型模式的优缺点及应用场景
          • 优缺点
            • 应用场景
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档