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

  原型实现:1.用于创建对象的具体类必须实现clone()操作,用于对象克隆自己以生成新的对象。下面通过原型来实现一个抽象工厂MazePrototypeFactory,creator使用原型工厂来创建对象。派生MazePrototypeFactory原型工厂:

/* 原型工厂 */
class MazePrototypeFactory:public MazeFactory {
public:
MazePrototypeFactory(Maze*, Wall*, Room*, Door*); virtual Maze* MakeMaze() const;
virtual Maze* MakeMaze(int) const;
virtual Wall* MakeWall() const;
virtual Door* MakeDoor(Room*, Room*) const; private:
Maze* _prototypeMaze;
Room* _prototypeRoom;
Wall* _prototypeWall;
Door* _prototypeDoor;
};

使用原型对象来配置一个原型工厂,原型工厂构造方法实现:

/* 原型工厂构造方法:使用原型对象来配置一个原型工厂 */
MazePrototypeFactory::MazePrototypeFactory(
Maze* m, Wall* w, Room* r, Door* d ) {
_prototypeMaze = m;
_prototypeRoom = r;
_prototypeWall = w;
_prototypeDoor = d;
}

原型工厂创建对象的方法是通过对象克隆:

/* 使用对象克隆来创建新的对象 */
Wall* MazePrototypeFactory::makeWall () const {
return _prototypeWall->Clone();
}
/* 创建其他对象代码类似 */

创建迷宫地图的客户代码:

/* 创建迷宫的客户代码 */
MazeGame game;
MazePrototypeFactory simpleFactory(new Maze,
new Wall, new Room, new Door);
Maze* maze = game.CreateMaze(simpleMazeFactory);

  原型工厂与抽象工厂比较:原型工厂不需要派生新的子类就可以来创建新的对象,只需要使用不同的原型对象来配置原型工厂即可。

  

5.对象创建型模式-原型PROTOTYPE的更多相关文章

  1. 设计模式(4)-对象创建型模式-Prototype模式

    1.对象创建型模式 1.4          Protoype模式 1.4.1需求 通过拷贝原形对象创建新的对象. 1.4.2结构 •P r o t o t y p e(Gr a p h i c) - ...

  2. 设计模式(3)-对象创建型模式-Abstract Factory模式

    1.对象创建型模式 1.3           Abstract Factory模式 1.3.1 需求 在下面情况能够使用Abstract Factory模式: •  一个系统要独立于它的产品的创建. ...

  3. 设计模式01 创建型模式 - 原型模式(Protype Pattern)

    参考 1. 设计模式:原型模式 | 博客园 2. Java clone深拷贝.浅拷贝 | CSDN 3. Cloneable接口和Object的clone()方法 | 博客园 原型模式(Prototy ...

  4. ProtoType(原型)-对象创建型模式

    1.意图 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 2.动机 通过拷贝或者“克隆”一个类的实例来创建新的实例. 3.适用性 当一个系统应该独立于它的产品创建.构成和表示时,要使 ...

  5. 设计模式可复用面向对象软件设计基础之对象创建型模式—ABSTRACT FACTORY( 抽象工厂)

    意图 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 适用性 在以下情况可以使用 Abstract Factory模式 • 一个系统要独立于它的产品的创建.组合和表示时. • 一 ...

  6. singleton(单件)-对象创建型模式

    1.意图 保证一个类仅有一个实例,并提供一个访问它的全局访问点. 2.动机 对一些类来说,只有一个实例是很重要的.让类自身负责保存它唯一的实例,这个类可以保证没有其他实例可以被创建(通过截取创建新对象 ...

  7. Singleton模式——对象创建型模式

    Singleton模式即为单例模式/单件模式. (一)意图--保证一个类仅有一个实例,并提供一个访问它的全局访问点. 如一台计算机可以有多个端口,但是应该统一管理这些端口,避免访问冲突.--选择Sin ...

  8. Builder(生成器)-对象创建型模式

    一.意图 将一个复杂对象的构建与它的表示分离,使得同样的构造过程可以创建不同的表示. 二.动机 一个复杂的对象的构造过程中,原料相同,可能会要求生产不同的产品,并且生产的产品种类还能够方便的增加.Bu ...

  9. 对象创建型模式------Builder(生成器)

    本文系转载,转载地址http://blog.sina.com.cn/s/blog_59b6af690100zj3l.html,只供自己学习使用. 假设现在有三种产品,是玩具,都是由三部分组成,头,身体 ...

随机推荐

  1. HDU 5755 Gambler Bo(高斯消元)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5755 [题目大意] 一个n*m由0,1,2组成的矩阵,每次操作可以选取一个方格,使得它加上2之后对 ...

  2. HDU 5758 Explorer Bo(树形DP)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5758 [题目大意] 给出一棵树,每条路长度为1,允许从一个节点传送到任意一个节点,现在要求在传送次 ...

  3. Maven POM配置释疑

    1.  对于有父子关系的Project, 父POM中依赖使用dependencies 和 dependencyManagement 的区别: dependencies: 即使子项目中不写该依赖项,仍然 ...

  4. Yii2.0中文开发向导——删除数据

    直接 model 删除 $model = User::find($id); $model->delete(); 带有条件的删除 $connection ->createCommand() ...

  5. Fedora 17配置ssh及Windows远程连接

    转载自:http://nanjingjiangbiao-t.iteye.com/blog/1794213 Fedora 23 默认已经安装好openssh server了,不用再装不过默认情况下没有开 ...

  6. Sublime 配置&插件推荐

    sublime 配置&插件推荐 Sublime编辑器的新鲜特性同时选中多个 先选中一个 再Command + D Command + P @搜索函数 #搜索关键字迷你地图 安装package ...

  7. js+jquery+css3

    (原生js+jquery+css3) 前言 项目需求要弄个瀑布流的页面,用的是waterfall这个插件,感觉还是可以的,项目赶就没自己的动手写.最近闲来没事,就自己写个.大致思路理清楚,还是挺好实现 ...

  8. html常用标签有哪些?

    html看似复杂,其实常用的标签并不多,这里总共介绍一些html的常用标签 文字处理: ①标题:<h1> to <h6> ②段落:<p>文字段落</p> ...

  9. 阿里云ECS每天一件事D1:配置SSH

    近期因为项目需求,采购了两台阿里云ECS,选择的系统为CentOS 6.3 X64 安全加固版,额外买了160G的硬盘,应该够应付此项目的需求了. ECS默认已经配置好了sshd服务,可以使用root ...

  10. 射频识别技术漫谈(7)——ID卡

    ID(Identification)是识别的意思,ID卡就是识别卡.ID卡包含范围广泛,只要具有识别功能的卡片都可以叫ID卡,例如条码卡,磁卡都可以是ID卡,我们这儿说的当然是射频识别卡. 射频ID卡 ...