Prototype(原型)–对象创建模式

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

二、动机
1.在软件系统中,经常面临着“某些结构复杂的对象”的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是它们却拥有比较稳定一致的接口。
2.如果应对这种变化?如何向“客户程序(使用这些对象的程序)”隔离出“这些易变对象”,从而使得“依赖这些易变对象的客户程序”不随着需求改变而改变?

三、适用性
当一个系统应该独立于它的产品创建、构建和表示时,要使用prototype模式;以及
1.当要实例化的类是在运行时刻指定时,例如,通过动态加载;或者
2.为了避免创建一个与产品层次平行的工厂类层次时;或者
3.当一个类的实例只能有几个不同状态组合中的一种时。建立相应数目的原型并克隆它们可能比每次用合适的状态手工实例化该类方便一些。

四、结构

五、效果
1.运行时候增加和删除产品。
2.改变值以指定新对象。
3.改变结构以指定新对象。
4.减少子类的构造。
5.用类动态的配置应用。

六、实现
1.使用一个原型管理器。
2.实现克隆操作。
3.初始化克隆对象。

七、要点总结
1.Prototype模式同样用于隔离类对象的使用者和具体类型(易变类)之间的耦合关系,它同样要求这些“易变类”拥有“稳定的接口”。
2.Prototype模式对于“如何创建易变类的实体对象”采用“原型克隆“的方法来做,它使得我们可以非常灵活地动态创建”拥有某些稳定接口“的新对象——所需工作仅仅是注册一个新类的对象(即原型),然后在任何需要的地方Clone。
3Prototype模式中的Clone方法可以利用某些框架中的序列化来实现深拷贝。

八、举例说明
类似于复制一个东西,然后粘贴。很多语言或者框架都实现了这个机制。

本文为李建忠设计模式视频的笔记以及《设计模式-可复用面向对象的软件的基础》和自己的部分见解

Prototype(原型)--对象创建模式相关推荐

  1. 设计模式之原型法(ProtoType)----对象创建型模式

    设计模式之原型法(ProtoType)----对象创建型模式 1.意图 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 2.适用性 1)当要实例化的类是在运行时刻指定时,例如,通过动 ...

  2. 李建忠设计模式之“对象创建”模式

    文章目录 工厂方法模式(Factory Method) 定义 动机 结构图 代码 要点 总结 抽象工厂模式(Abstract Factory) 定义 动机 结构图 代码 要点 总结 原型模式(Prot ...

  3. Singleton(单件)--对象创建模式

    Singleton(单件)–对象创建模式 一.意图 保证一个类仅有一个实例,并提供一个访问它的全局访问点. 二.动机 1.在软件系统中,经常有这样一些特殊的类,必须保证它们在系统中只存在一个实例,才能 ...

  4. Abstract Factory(抽象工厂)--对象创建模式

    Abstract Factory (抽象工厂)–对象创建模式 一.意图 提供一个创建一系列相关或者相互依赖的接口,而无需指定它们具体的类. 二.动机 1.在软件系统中,经常面临着"一系列相互 ...

  5. JavaScript中的面向对象(1):对象创建模式

    对象 JS中的对象是无序属性的集合,属性可以包括基本值.对象.函数.简而言之,JS中的对象就是一组键值对. 创建对象 工厂模式 工厂模式是用函数将创建对象的细节封装起来. function creat ...

  6. 理解js的prototype原型对象

    我们创建的每一个函数都有一个prototype(原型)属性.这个属性是一个指针,指向一个对象,而这个对象的用途是包括能够由特定类型的全部实例共享的属性和方法.假设依照字面意思来理解,那么prototy ...

  7. 深入理解prototype(原型对象)

    对JavaScript中原型模式的理解 一:什么是原型对象?有什么优点?    简单的来说,无论何时,我们创建的每一个函数都有一个prototype属性,这个属性是一个指针,指向一个对象,这个对象包含 ...

  8. javascript的对象创建模式---命名空间模式

    javascript中对象的概念是很普遍的,对象是是对象,数组是对象,函数也是对象,字符串其实也是对象.常见的对象创建方法有对象字面量.构造函数创建.我们先来看看对象的创建还有哪些更高级的模式. 一. ...

  9. JavaScript模式读书笔记 第5章 对象创建模式

    1,命名空间模式  namespace   <script> var myApp = {};//通过全局变量来实现命名空间 maApp.Parent = function (){   }; ...

最新文章

  1. AI基础:特征工程-文本特征处理
  2. Idea使用技巧总结(未完待续)
  3. windbg + sos 调试w3wp进程内存崩溃问题
  4. Codeforces Round #245 (Div. 1) E. Points and Segments 欧拉回路 + 建模
  5. matlab 三维核密度图_Matlab精彩画图示例:三维网状图和三维曲面图
  6. bean json转kotlin_Android--------kotlin插件神器Json直接生成javaBean
  7. 批处理call和start
  8. Oracle 20c 新特性:持久化内存数据库 - Persistent Memory Database
  9. 18 ubuntu 远程原生_CNCF公布中国云原生调查报告:49%使用容器技术,Kubernetes 应用率达 72%...
  10. PBRT的scene.pbrt使用方法
  11. Unity Kinect体感跑酷互动游戏方案
  12. Autodesk 3ds Max 2014选择集闪退问题
  13. 宝塔 域名指向ip 反向代理
  14. tableau 颜色设置汇总
  15. 计算机开机连不上网,我家电脑有时候开机为什么连不上网,重启以后就好?
  16. UnityShader笔记第三课-MVP矩阵原理-M矩阵
  17. 强化学习综述(机器学习角度)
  18. 粒倍营浅谈如何做好SEO
  19. R语言利用igraph和networkD3包快速入门做出炫酷的社交网络图等几类图。
  20. 【物联网那些事儿】18 大物联网操作系统,Raspbian Pi、Ubuntu Core、Windows 10 IoT、Micropython、OpenWrt ....你用过哪几个?

热门文章

  1. linux之用xargs删除这个目录下面后缀为txt的文件(包括子目录)
  2. linux之类似Windows的资源管理器gnome-system-monitor(可用这个杀死进程)
  3. 云服务器cpu性能,云服务器cpu性能
  4. 公司c语言面试题目,c语言面试最必考的十道试题,求职必看!!!
  5. 营业执照在线一键生成_如何在线制作证件照?证件照一键生成的方法
  6. matlab读取文件夹下所有文件的字符串,MATLAB读取文件夹下所有文件的文件名并读取数据...
  7. php运行条件,PHP配置环境要求 php运行的先决条件
  8. 2020年高考数学试题难吗?历史上最难数学卷不是2003!
  9. java里面什么时候环境变量_Java的环境变量什么时候需要设置?
  10. vb6 由于超出容量限制 不能创建新事务_分布式限流?你也能轻松玩转(没啥新技术)...