本系列所有文章来自李建忠老师的设计模式笔记,系列如下:
设计模式(一)面向对象设计原则
23种设计模式(二)组件协作之模板方法
23种设计模式(三)组件协作之策略模式
23种设计模式(四)组件协作之观察者模式
23种设计模式(五)单一职责之装饰模式
23种设计模式(六)单一职责之桥模式
23种设计模式(七)对象创建之工厂方法
23种设计模式(八)对象创建之抽象工厂
23种设计模式(九)对象创建之原型模式
23种设计模式(十)对象创建之构建器
23种设计模式(十一)对象性能之单件模式
23种设计模式(十二)对象性能之享元模式
23种设计模式(十三)接口隔离之门面模式
23种设计模式(十四)接口隔离之代理模式
23种设计模式(十五)接口隔离之适配器
23种设计模式(十六)接口隔离之中介者
23种设计模式(十七)状态变化之状态模式
23种设计模式(十八)状态变化之备忘录
23种设计模式(十九)数据结构之组合模式
23种设计模式(二十)数据结构之迭代器
23种设计模式(二十一)数据结构之职责链
23种设计模式(二十二)行为变化之命令模式
23种设计模式(二十三)行为变化之访问器
23种设计模式(二十四)领域规则之解析器

文章目录

  • 动机
  • 模式定义
  • 要点总结

动机

  在软件系统中,经常面临着“某些结构复杂的对象”的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是它们却拥有比较稳定一致的接口。

  之前的工厂方法和抽象工厂将抽象基类和具体的实现分开。原型模式也差不多,但是原型模式将抽象基类合并。

  • Prototype.cpp
//抽象类
class ISplitter{public:virtual void split()=0;virtual ISplitter* clone()=0; //通过克隆自己来创建对象virtual ~ISplitter(){}};
  • ConcretePrototype.cpp
//具体类
class BinarySplitter : public ISplitter{public:// 拷贝构造自己virtual ISplitter* clone(){return new BinarySplitter(*this);}
};class TxtSplitter: public ISplitter{public:virtual ISplitter* clone(){return new TxtSplitter(*this);}
};class PictureSplitter: public ISplitter{public:virtual ISplitter* clone(){return new PictureSplitter(*this);}
};class VideoSplitter: public ISplitter{public:virtual ISplitter* clone(){return new VideoSplitter(*this);}
};
  • Client.cpp
class MainForm : public Form
{ISplitter*  prototype;//原型对象public:MainForm(ISplitter*  prototype){this->prototype=prototype;}void Button1_Click(){ISplitter * splitter=prototype->clone(); //克隆原型splitter->split();}
};

模式定义

  使用原型实例指定创建对象的种类,然后通过拷贝这些原型来创建新的对象

  什么时候使用原型,什么时候使用工厂最大的区分点就在于:用工厂方法创建对象是不是非常简单的几个步骤就可以把这个对象创建出来,还是说需要考虑对象很复杂的中间状态,然后又很希望保留这个中间状态,如果是后者的话就用原型。

要点总结

  Prototype模式同样用于隔离类对象的使用者和具体类型(易变类)之间的耦合关系,它同样要求这些“易变类”拥有稳定的接口。

  Prototype模式对于“如何创建易变类”的实体对象“采用”原型克隆的方法来做,它使得我们可以非常灵活地动态创建“拥有某些稳定接口”的新对象–所需工作仅仅是注册一个新类的对象(即原型),然后在任何需要的地方Clone

  Prototype模式中的Clone方法可以利用某些框架中的序列化来实现深拷贝。

23种设计模式(九)对象创建之原型模式相关推荐

  1. 23种设计模式(7):原型模式

    本文主要介绍设计模式中的原型模式. 现在电子账单越来越流行了,比如你的信用卡,到月初的时候银行就会发一份电子邮件到你邮箱中,说你这个月消费了多少,什么时候消费的,积分是多少等等,这是每个月发一次,还有 ...

  2. C++23种设计模式(1)-工厂方法模式

    C++常用的设计模式有23种. 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享 ...

  3. 23种设计模式,今天来聊聊模板模式,工厂方法模式,单例模式。

    23种设计模式,今天来聊聊模板模式,工厂方法模式,单例模式. 1. 随处可见的模板模式 2. 暗含讲究的工厂方法模式 3. 单例模式隐含的坑你能看到第几层? 视频讲解如下,点击观看: [干货篇]23种 ...

  4. 23种设计模式(二十三)访问者模式(阁瑞钛伦特软件-九耶实训)

    常说的设计模式是23种设计模式,分为3大类: 创建型模式5种:工厂方法.抽象工厂.单例.建造者.原型 结构型模式7种:适配器.代理.桥接.装饰者.外观.享元.组合 行为型模式11种:模板方法.解释器. ...

  5. 23种设计模式(十四)模板方法模式(阁瑞钛伦特软件-九耶实训)

    常说的设计模式是23种设计模式,分为3大类: 创建型模式5种:工厂方法.抽象工厂.单例.建造者.原型 结构型模式7种:适配器.代理.桥接.装饰者.外观.享元.组合 行为型模式11种:模板方法.解释器. ...

  6. 23种设计模式【全】 包含:模式定义 使用场景 实现步骤 优缺点 模式区别 UML类图 示例代码 注意项等

    23种设计模式(全) ***项目地址***:[GitHub](https://github.com/yjhroot/design-pattern) 声明 模式分类(3大类) 创建型模式(共5种) 结构 ...

  7. 【设计模式】对象的克隆-原型模式

    原型模式是对象的创建模式.原型模式使用原型实例指定创建对象的类型,通过克隆原型来创建新的对象,其实就是复制对象. 原型模式在我们的生活中处处都存在,大家应该用过很多软件,都有模板,就拿我现在用的思维导 ...

  8. 23种设计模式(6):代理模式

    先看一个例子,是有关于打游戏杀怪兽的. //先定义一个游戏者接口 public interface IGamePlayer {//登陆游戏public void login(String user, ...

  9. 23种设计模式(15):备忘录模式

    定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样就可以将该对象恢复到原先保存的状态 类型:行为类 类图: 我们在编程的时候,经常需要保存对象的中间状态,当需要的时 ...

  10. C++23种设计模式(22)-中介者模式

    中介者模式:用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互.中介者模式的例子很多,大到联合国安理会,小到房屋中介,都扮演了 ...

最新文章

  1. 装饰器方式的添加路由
  2. java 底层运行_从表面到底层丨Java和JVM的运行原理,现在带给你
  3. java线程实现方式
  4. 调集群,我的姿势不对,好累!
  5. python多线程读取数据库数据_python多线程操作MySQL数据库pymysql
  6. 分数的拆分原理和方法_常见的节税原理你知道吗?
  7. 2014 华为机考 中国海洋大学上午第三题(java实现)
  8. Linux入门学习(五)
  9. python编程入门第三版pdf-Python核心编程第3版PDF电子书免费下载
  10. 解决学校断网,突破天翼校园,实现共享wifi以及linux下无天翼校园客户端
  11. 软件测试自学好还是培训好?软件测试自学与培训的优劣势对比
  12. Centos 7 Mysql 配置文件位置
  13. springboot简单集成quartz定时任务框架,实现用户封号定时解封问题
  14. Android Toast提示的使用
  15. RCE(命令执行)总结
  16. 计算机缺少什么无法正常启动,电脑无法正常启动
  17. MySQL Router 8 详解
  18. 1080p、1080i
  19. 【程序员必备】七夕表白攻略:教你用代码轻松打动她的内心!
  20. js赋值改变后,原数据也发生改变

热门文章

  1. (原创)javascript进阶(三)
  2. 控制台应用程序《石头剪刀布》——新手,
  3. webService的使用-----Eclipse
  4. Windows server 2019 - Raid1 搭建+测试
  5. Security+ 学习笔记32 云安全控制
  6. Security+ 学习笔记27 灾后恢复
  7. Kubernetes详解(十一)——标签与标签选择器
  8. [C语言数据存储深度解析]-内存数据搞不懂?三千字长文带你走进数据类型及其存储
  9. ansible 第三次作业
  10. Python3的os.popen()与subprocess使用(关于数据处理)