设计模式(5)-对象创建型模式-Builder模式
来源:互联网 发布:js对联广告 编辑:程序博客网 时间:2024/04/30 20:55
1.1 Builder模式
1.1.1 功能
这个模式的描述在GoF上描述的比较抽象,想做到两点:
1. 创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式:
这句话要分为三个部分来理解:
1).主语缺省为客户程序,是客户程序来创建复杂对象;
2).要独立于该对象的组成部分,需要builder来封装这些组成部分(组件)的实现;
3).要独立于装配方式,需要Director类来封装这些组装方式.
2. 当构造过程必须允许被构造的对象有不同的表示时
1).对这句话的理解是:builder中的组成部分要允许传入不同的参数从而对同一个组成部分生成不同的对象.
1.1.2 结 构、参与者与协作关系
参与者:
•B u i l d e r
— 为创建一个P r o d u c t对象的各个部件指定抽象接口。
•C o n c r e t e B u i l d e r
— 实现Bu i l d e r的接口以构造和装配该产品的各个部件。
— 定义并明确它所创建的表示。
— 提供一个检索产品的接口。
•Director
— 构造一个使用Bu i l d e r接口的对象。
•P r o d u c t
— 表示被构造的复杂对象。C o n c r e t e B u i l d e r创建该产品的内部表示并定义它的装配过程。
— 包含定义组成部件的类,包括将这些部件装配成最终产品的接口。
协作
• 客户创建D ir e c t o r对象,并用它所想要的 B u i l d e r对象进行配置。
• 一旦产品部件被生成,导向器就会通知生成器。
• 生成器处理导向器的请求,并将部件添加到该产品中。
• 客户从生成器中检索产品。
1.1.3 例子-C++
这里例子来自GoF,其中MazeBuilder即builder类,MazeGame即director类,MazeGame的CreateMaze方法即为construct()方法.
M a z e B u i l d e r类定义了创建各种创建迷宫部件的builder类的接口:
Class MazeBuilder{ public: virtualvoid BuildMaze(){} virtualvoid BuildRoom(int room){} virtualvoid BuildDoor(int roomFrom,int roomTo){} virtualMaze *GetMaze(){return 0;} protected: MazeBuilder(); } Maze*MazeGame::CreateMaze(MazeBuilder &builder) { builder.BuildMaze(); builder.BuildRoom(1); builder.BuildDoor(1,2); }
子类StandardMazeBuilder是一个创建简单迷宫的实现,他将要创建的迷宫放在变量_CurrentMaze中。
Class StandardMazeBuilder : public MazeBuilder{public: StandardMazeBuilder(); virtualvoid BuildMaze(); virtualvoid BuildRoom(int); virtualvoid BuildDoor(int,int); VirtualMaze*GetMaze();Private: DirectionCommonWall(Room*,Room*); Maze *_currentMaze;}
客户现在可以使用CreateMaze和StandardMazeBuilder来创建一个迷宫:
Maze *maze;MazeGame game;StandardMazeBuilder builder;game.CreateMaze(builder);Maze=builder.GetMaze();
- 设计模式(5)-对象创建型模式-Builder模式
- 设计模式(5)-对象创建型模式-Builder模式
- 设计模式之生成器(Builder)----对象创建型模式
- 设计模式之对象创建型 — builder 生成器模式
- 设计模式-创建型:Builder
- builder模式-对象创建型模式
- 创建型设计模式---构建模式(Builder)
- 创建型设计模式之Builder模式
- Builder模式创建对象
- 【设计模式基础】创建型模式 - 5 - 生成器(Builder)
- C#面向对象设计模式纵横谈4 Builder生成器模式创建型模式
- (C++设计模式) ------建造者模式Builder -- 创建型模式
- 设计模式:创建型模式:建造模式(Builder Pattern)
- 设计模式-创建型模式#建造者模式Builder
- Builder生成器(创建型设计模式)面向对象设计模式纵横谈讲座笔记之四
- Builder(生成器)---对象创建型模式
- 创建对象之Builder模式
- [创建型设计模式:Builder]代码实现
- windows和Linux启动过程对比
- android开发——框架理解及源码学习计划
- 注册页面(html js)
- Asp.net课后生活(5)
- C++ sort
- 设计模式(5)-对象创建型模式-Builder模式
- 使用strlcpy和strlcat
- 在win7下开启mysql服务
- Android Loaders(三)实现一个Base Loader
- POJ3130排序增量法
- asp获取当前路径语句大全
- nyoj 61 传纸条(一)双线程DP
- Asp.net课后生活(6)
- STM32F4 TIM1 7路PWM信号输出