博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式-原型模式
阅读量:6081 次
发布时间:2019-06-20

本文共 1468 字,大约阅读时间需要 4 分钟。

hot3.png

1. 原型模式概述

原型模式: 使用原型实例指定创建对象的种类, 并且通过拷贝这些原型创建爱你新的对象. 原型模式是一种对象创建型模式.

学习这个设计模式参考的是刘伟的博客, 讲的大概意思, 说白了就类似于C++中对象的拷贝, 包括深拷贝和浅拷贝, 其中的原理特性什么的也都是完全相同的. 这个设计模式是比较简单的, 一看就懂, 个人觉得没什么好说的.

原型模式中包含的几个角色:

  • Prototype(抽象原型类): 它是声明克隆方法的接口, 它是所有具体原型类的父类, 可以是抽象类也可以是接口, 甚至可以是具体实现类.
  • ConcreatePrototype(具体原型类): 它实现了抽象原型类中声明的克隆方法, 在克隆方法中返回自己的一个克隆对象.
  • Client(客户端): 让一个圆形对象克隆自身从而创建一个新的对象, 在客户类中只需要直接实例化或者通过工厂方法等方式创建一个原型对象, 再通过调用该对象的克隆方法即可得到多个相同的对象. 由于客户类针对抽象原型类Prototype编程, 因此用户可以根据需要选择具体原型类. 系统具有较好的扩展性, 增加或者更换原型类都比较方便.

2. Swift实现一个例子

好吧, 这个太简单了, 太容易理解了, 就不谢例子了, 描述一下吧! 比如自定义了一个对象, 对象有几个属性, 浅拷贝就是只拷贝地址, 地址中内容是不变的, 通过一个地址修改地址中的内容, 则拷贝的地址中内容也会跟着变化; 深拷贝就是拷贝地址中的内容, 这时候需要重新开辟内存空间存放值.

3. 原型模式总结

原型模式作为一种快速创建大量相同或者相似对象的方式, 在软件开发中应用还是比较广泛的.

3.1 原型模式的主要优点

  1. 当创建新的对象实例比较复杂时候, 使用原型模式可以简化对象创建过程. 通过复制一个已有实例来提高新实例的创建效率.
  2. 扩展性好, 由于在原型模式中提供了抽象原型类, 在客户端可以针对抽象原型类编程, 而降具体原型类写在配置文件中, 增加或者减少产品类对系统都没有任何影响.
  3. 原型模式提供了简化的创建结构, 工厂方法模式通常需要一个与产品类等级结构相同的工厂等级结构, 而原型模式就不需要这样, 原型模式中产品的复制是通过封装在原型类中的克隆方法实现的, 无需专门的工厂类来创建产品.
  4. 可以使用深克隆保存对象的状态, 使用原型模式将对象复制一份并将其保存起来, 以便在需要时候使用, 可辅助实现撤销操作.

3.2 主要缺点

  1. 需要为每一个类配备一个克隆方法, 而且该克隆方法位于类的内部, 当对已有的类进行修改时候, 需要修改源代码, 违背了"开闭原则".
  2. 在实现深克隆时需要编写复杂的代码, 而且当对象之间存在多重的嵌套引用时候, 为了实现深克隆, 每一层对象对应的类都必须支持深克隆, 实现起来会比较麻烦.

3.3 适用场景

  1. 创建新对象成本较大(如初始化需要较长的时间, 占用太多的CPU或者网络资源), 新的对象可以通过原型模式复制已有对象来获得, 如果是相似对象, 则可以对其成员变量稍作修改.
  2. 如果系统要保存对象状态, 而对象状态变化很小或者对象本身占用内存较少时候, 可以通过原型模式配合备忘录模式来实现.
  3. 需要避免分层次的工厂类来创建分层次的对象, 并且类的实例对象只有一个或者很少几个组合状态, 通过复制原型对象得到新实例可能比通过构造函数创建新实例更加方便.

Reference:

转载于:https://my.oschina.net/whforever/blog/804008

你可能感兴趣的文章
搞全闪存阵列的各执一词 宏杉说别吵了,就用我哒
查看>>
玩转搭载眼球追踪的FOVE 0,需要多高的配置呢?
查看>>
vue-router 源码:前端路由
查看>>
Flask下载文件
查看>>
java基础学习_基础语法(上)02_day03总结
查看>>
乐视印度公司裁员80%,全球化扩张遭遇滑铁卢,它还能撑多久?
查看>>
weex sdk集成到Android工程二. weex sdk集成到Android工程
查看>>
Git工程实践(二)多账号配置
查看>>
鱼鹰软件签约老牌传播机构思艾传播集团
查看>>
线程(杂)
查看>>
未来杯高校AI挑战赛激战正酣 金山云全程提供云资源
查看>>
【资讯】福布斯:旅行积分计划是区块链主要目标,对旅行者来说是好消息
查看>>
高桥智隆:未来机器人将取代智能手机,并成为人类的朋友
查看>>
工信部表示:建立网络数据安全管理体系 强化用户个人信息保护
查看>>
感受真实的华为-记山东CIO智库会员华为之行
查看>>
Spring的依赖注入概述
查看>>
为什么我的联想打印机M7450F换完墨粉之后打印机显示请更换墨粉盒?这是我的墨盒第一次灌粉·、...
查看>>
命运多舛、前途未卜,共享经济年终盘点之网约车
查看>>
研究人员研制出可有效抑制艾滋病病毒的新药,可让病毒几乎检测不出来
查看>>
什么是区块链?超级账本 Brian Behlendorf 从五个方面教你认识
查看>>