您的位置:首页 > 产品设计 > UI/UE

设计模式学习笔记(二)——Build生成器

2007-02-08 09:46 471 查看
二、Build(生成器)
情景举例:
创建一个可重用的建造迷宫程序。
代码示例:
/*用非抽象类来让客户只定义自己感兴趣的操作

*/

classMazeBuilder{

public:

virtualvoidBuildMaze(){}

virtualvoidBuildRoom(introom){}

virtualvoidBuildDoor(introomFrom,introomTo){}


virtualMaze*GetMaze(){return0;}

protected:

MazeBuilder();

};

/*使用MazeBuilder来一步一步创建一个Maze

*/

Maze*MazeGame::CreateMaze(MazeBuilder&builder){

builder.BuildMaze();


builder.BuildRoom(1);

builder.BuildRoom(2);

builder.BuildDoor(1,2);


returnbuilder.GetMaze();

}

/*可以重用MazeBuilder来创建不同种类的迷宫

*/

Maze*MazeGame::CreateComplexMaze(MazeBuilder&builder){

builder.BuildRoom(1);

//...

builder.BuildRoom(1001);


returnbuilder.GetMaze();

}

/*MazeBuilder子类,重新定义其操作

*/

classStandardMazeBuilder:publicMazeBuilder{

public:

StandardMazeBuilder();

/*

*/

virtualvoidBuildMaze();

virtualvoidBuildRoom(int);

virtualvoidBuildDoor(int,int);

/*

*/

virtualMaze*GetMaze();

private:

DirectionCommonWall(Room*,Room*);

Maze*_currentMaze;

};

/*在主程序调用CreateMaze,以StandardMazeBuilder为参数

*/

Maze*maze;

MazeGamegame;

StandardMazeBuilderbuilder;


maze=game.CreateMaze(builder);


个人理解:
MazeBuild为生成器,MazeGame为使用生成器的导向器,导向器可以重复使用Build来进行不同的生成操作(如例中的CreateMaze和CreateComplexMaze)。而导向器的操作大部分使用的是Build中定义的操作,即一步步精细地生成产品(即Maze)。
Build类是一个抽象类,其中的操作都是空操作。注意不是纯抽象类,故意这么做是为了让Build的子类能够只定义自己感兴趣的操作。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: