设计模式:构建器模式(Builder)
来源:互联网 发布:java电商平台开源代码 编辑:程序博客网 时间:2024/04/19 17:16
构建器模式有点类似于之前的抽象工厂模式,但比抽象工厂模式更强大,构建器模式可以看做由两部分组成,一是builder,二是director,builder的基本思想就是抽象工厂,而director的存在是为了使得对builder的使用更加灵活,下面是builder的代码示例:
class A {public:int i;A() : i(1) {};}; class B {public:char c;B() : c('a') {};};class AB {public:A a;B b;};class Builder {protected:AB* p;public:Builder() { p = new AB(); }virtual void addABy1() = 0;virtual void addABy2() = 0;virtual void addBBy1() = 0;virtual void addBBy2() = 0;AB* getAB() { return p; }};class Builder1 : public Builder {public:void addABy1() { p->a.i += 1; }void addABy2() { p->a.i += 2; }void addBBy1() { p->b.c += 1; }void addBBy2() { p->b.c += 2; }};class Builder2 : public Builder {public:void addABy1() { p->a.i += 1*3; }void addABy2() { p->a.i += 2*3; }void addBBy1() { p->b.c += 1*3; }void addBBy2() { p->b.c += 2*3; }};
A、B、AB并不是我们要关注的重点,A、B可以看做是AB的组件,builder的作用就是创建AB的对象,不同的builder根据自己的需求以不同的方式创建AB的对象,在上述代码中有一个基类Builder,它给派生类提供了一系列接口,两个派生类Builder1和Builder2分别重定义了这些接口,如果客户程序员需要以其他方式创建AB的对象,也可以定义其他的派生Builder。可以看到,Builder基本上就是基于抽象工厂模式。
构建器的强大之处在于还有一个director,注意到Builder中有两个处理A的方法:addABy1和addABy2,这就提供了一种选择,是使用前者还是使用后者,事实上,director就是做这件事的主,因此说director的存在使得对builder的使用更加灵活,可以看看director的代码:
class Constructor {Builder *pc;public:Constructor(Builder *q) : pc(q) {}void construct();};void Constructor::construct() {pc->addABy1();pc->addBBy2();};这里的Constructor就是一个director,它保存了指向某个Builder的指针,并在construct()中使用这个指针来选择合适的方法去构建AB的对象,也就是说Builder先弄了个AB的毛坯,提供了一系列处理这个毛坯的方法,最后由Constructor选用喜欢的方法来处理这个毛坯,最终得到个成品。构建器模式的使用示例如下:
int main() { Builder *p = new Builder1();Constructor c(p);c.construct();return 0; }
1 0
- 设计模式:构建器模式(Builder)
- 设计模式—构建器模式(Builder Pattern)
- 设计模式(4)--Builder 建造者(构建器)
- 设计模式之构建Builder
- Builder 构建器模式
- 设计模式——构建器(Builder)模式
- 常用设计模式(一)Builder(构建者)模式
- 设计模式——构建者模式(Builder)
- 浅谈 java 设计模式--构建模式(Builder pattern)
- 设计模式学习之构建者模式(Builder)
- Java设计模式--构建者模式(Builder)
- 设计模式入门学习 构建Builder模式
- 创建型设计模式---构建模式(Builder)
- 设计模式之构建者Builder模式
- 设计模式之Builder构建者模式
- 设计模式之建造者模式(Builder)以及构建器
- Builder(构建器,生成器)模式
- JAVA构建器Builder模式
- 大话设计模式之单例模式
- 成为你自己
- 所有引擎,你让程序员情何以堪
- Xcode快捷键
- Ubuntu与Windows双系统修改默认启动项
- 设计模式:构建器模式(Builder)
- Shell脚本调试技术
- 黑马程序员——反射的应用&Hashcode
- 用递归解决蓝桥杯的一道排列问题
- 好博客地址备忘录
- 当才华撑不起你的野心时,你就该静下心来学习
- 读取似九宫格数字的HTML页面
- iOS UICollectionView手写代码实现步骤
- Centos6下解决Ceph pgs不一致问题