设计模式学习笔记(二)——Build生成器
2007-02-08 09:46
471 查看
二、Build(生成器)
情景举例:
创建一个可重用的建造迷宫程序。
代码示例:
个人理解:
MazeBuild为生成器,MazeGame为使用生成器的导向器,导向器可以重复使用Build来进行不同的生成操作(如例中的CreateMaze和CreateComplexMaze)。而导向器的操作大部分使用的是Build中定义的操作,即一步步精细地生成产品(即Maze)。
Build类是一个抽象类,其中的操作都是空操作。注意不是纯抽象类,故意这么做是为了让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的子类能够只定义自己感兴趣的操作。
相关文章推荐
- 设计模式学习笔记(Build模式)
- 设计模式:生成器模式(学习笔记)
- 设计模式学习笔记(四)——Builder生成器模式
- 设计模式学习笔记(四)——Builder生成器模式
- 设计模式之--生成器(builder)模式(学习分析笔记)
- 设计模式学习笔记——简单工厂模式
- PetShop3.x学习笔记8-《PetShop 3.x的设计模式与体系结构》节选-数据库可移植性
- java学习笔记-java开发中的23种设计模式
- 学习小笔记---大话PHP设计模式
- 设计模式学习笔记--单例(Singleton)和多例(Multiton)
- 设计模式-策略模式学习笔记
- [学习笔记]设计模式之Bridge
- 二、策略模式——设计模式学习笔记
- 七、模板方法模式——设计模式学习笔记
- java/android 设计模式学习笔记(16)---命令模式
- (转载)设计模式学习笔记(十一)——Facade外观模式
- 设计模式学习笔记之单例模式
- 十八、桥接模式——设计模式学习笔记
- ios学习笔记(二)--代理设计模式
- 设计模式学习笔记-装饰模式