博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
5.对象创建型模式-原型PROTOTYPE
阅读量:5843 次
发布时间:2019-06-18

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

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

  原型实现: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);

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

 

  

转载于:https://www.cnblogs.com/VincentXu/p/3348578.html

你可能感兴趣的文章
oracle job 定时执行参数
查看>>
虚拟现实大潮渐近:Oculus VR、EA和Avegant等多家公司...
查看>>
内存中压缩图片
查看>>
Android命令Monkey压力测试,详解
查看>>
log4j2 mybatis 显示 sql 和 结果集
查看>>
Linux——JDK的部署
查看>>
设计模式-Factory Method Pattern
查看>>
VS2010下Boost1.55.0配置
查看>>
负载均衡(LB)集群 dr
查看>>
Entity Framework 批量插入
查看>>
hierarchyviewer
查看>>
linux 文件系统的管理 (硬盘)
查看>>
微服务框架开发(二)—扩展spring schema
查看>>
(转)直接拿来用!最火的iOS开源项目(一)
查看>>
java8新特性stream深入解析
查看>>
Linux manjaro系统安装后无法连接wifi,解决方案
查看>>
关于我的知识星球服务
查看>>
前端每隔几秒发送一个请求
查看>>
div+css+js 树形菜单
查看>>
javax.jdo.option.ConnectionURL配置的问题
查看>>