zoukankan      html  css  js  c++  java
  • 5.对象创建型模式-原型PROTOTYPE

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

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

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

      

  • 相关阅读:
    不用递归实现List转Tree
    spring cloud stream 局部异常和全局异常混乱
    HTTP协议详解(真的很经典)
    Python3 多线程压测接口数据:写入到influxdb:通过grafana展示
    Eclipse使用git最简易流程
    oracle patch包一定要775的权限
    安装19c grid时CRS-1705错误
    Ubutun 设置开机启动程序
    利用selenium将edge浏览器里面的网页保存为pdf
    Ruckus ICX7150 Switch License Upgrade from 1G to 10G
  • 原文地址:https://www.cnblogs.com/VincentXu/p/3348578.html
Copyright © 2011-2022 走看看