设计模式[20]-Builder

Type: Creational

Builder: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。是为了将构建复杂对象的过程和它的部件解耦。Builder负责构建部件,Director负责处理构建的过程。

#include <iostream>
using namespace std;

class Part{};

class Product
{
public:
    Product(Part* pPartA, Part* pPartB, Part* pPartC){};
};

class Builder
{
public:
    virtual void buildPartA()=0;
    virtual void buildPartB()=0;
    virtual void buildPartC()=0;
};

class ConcreteBuilder: public Builder
{
public:
    void buildPartA()
    {
        cout<<"Build Part A"<<endl;
        mPartA = new Part;
    };
    void buildPartB()
    {
        cout<<"Build Part B"<<endl;
        mPartB = new Part;
    };
    void buildPartC()
    {
        cout<<"Build Part C"<<endl;
        mPartC = new Part;
    };
    Product* getResult()
    {
        cout<<"Get Result"<<endl;
        return new Product(mPartA, mPartB, mPartC);
    };
private:
    Part *mPartA, *mPartB, *mPartC;
};

class Director
{
public:
    Director(Builder* pBuilder):m_pBuilder(pBuilder){};
    void construct()
    {
        cout<<"Director construct"<<endl;
        m_pBuilder->buildPartA();
        m_pBuilder->buildPartB();
        m_pBuilder->buildPartC();
    };
private:
    Builder* m_pBuilder;
};

int main()
{
    ConcreteBuilder* pBuilder = new ConcreteBuilder;
    Director *pDirector = new Director(pBuilder);
    pDirector->construct();
    pBuilder->getResult();

    system("pause");

    return 0;
}
时间: 2024-09-26 07:31:26

设计模式[20]-Builder的相关文章

C#设计模式之建造者设计模式(Builder)

一.建造者(Builder)模式 建造者模式可以将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象. 对象性质的建造 有些情况下,一个对象会有一些重要的性质,在它们没有恰当的值之前,对象不能作为一个完整的产品使用.比如,一个电子邮件有发件人地址.收件人地址.主题.内容.附录等部分,而在最起码的收件人地址未被赋值之前,这个电子邮件不能发出. 有些情况下,一个对象的一些性质必须按照某个顺序赋值才有意义.在某个性质没有赋值之前,另一个性质则无法赋值.这

求教!用Java编写,使用设计模式中Builder模式创建树形菜单,其中要求树形菜单为一个满二叉树

问题描述 输入参数为树的深度.如输入为3则输出以下树形菜单(注意缩进)Level_1Level_2_1Level_3_1_1Level_3_1_2Level_2_2Level_3_2_1Level_3_2_2 解决方案 解决方案二:就这还有用builder模式?是怎么想的?乱用.

温故而知新:设计模式之Builder

Builder模式主要用于以下场景: 需要创建一个较复杂的大对象实例,并且构成该对象的子对象可能经常会发生变化,但是组成大对象的算法却相对稳定. 比如:我们做b/s开发时,经常会遇到一些系统要求支持模板/皮肤切换,一个完整的页面由若干子模块组成,不管模板如何变换,子模块的内容/位置如何变化,但组成页面的算法即相对固定. 我们假定每个页面由header,body,footer三个基本模块组成,先抽象出来: 接口抽象部分 #region 把不依赖具体细节的部分(即相当稳定,不变的部分)抽象出来   

设计模式——20状态模式(State)

20.状态模式(State)核心思想就是:当对象的状态改变时,同时改变其行为,很好理解!就拿QQ来说,有几种状态,在线.隐身.忙碌等,每个状态对应不同的操作,而且你的好友也能看到你的状态,所以,状态模式就两点:1.可以通过改变状态来获得不同的行为.2.你的好友能同时看到你的变化. State类是个状态类,Context类可以实现切换,我们来看看代码: [java] view plaincopy package com.xtfggef.dp.state; /** 状态类的核心类 2012-12-1

[Head First设计模式]山西面馆中的设计模式——建造者模式

系列文章 [Head First设计模式]山西面馆中的设计模式--装饰者模式 [Head First设计模式]山西面馆中的设计模式--观察者模式 引言 将学习融入生活中,是件很happy的事情,不会感觉到累.一个感觉:很好玩!挺开心的...... 为什么会出现建造者模式? 在软件系统中,有时面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成. 这个复杂的对象的各个部分经常面临剧烈变化,但是将它们组合在一起的算法却相对稳定. 比如:建一所房子,建房子的过程基本不变

设计模式(Patterns in Java)

设计 板桥里人的设计模式讲解是国内媒体(包括书籍和网站)中最早的成体系介绍,本系列介绍纯为免费传播(转载本站文章,请保留作者和网址),尽量做到言简意赅,通俗易懂,但是难免有所疏漏敬请来信或论坛讨论,不断完善. 真正掌握设计模式需要在实践中不断研究和使用,关于设计模式在具体实例的应用,可以阅读板桥里人的书籍<Java实用系统开发指南>.书籍中8个实例都从设计模式.框架等高度对系统进行崭新的设计和实现,这种应用理念正是现在以及将来软件设计和编程的根本之道. 1:前言 学习GoF设计模式的重要性 建

Java设计模式学习心得

整个设计模式贯穿一个原理:面对介面编程,而不是面对实现,(面向物件编程应该改爲面向介面编程).目标原则是:降低耦合,增强灵活性. 一.创建模式 1.设计模式之Factory(工厂方法和抽象工厂) 使用工厂模式就象使用new一样频繁. 2.设计模式之Prototype(原型) 用原型实例指定创建物件的种类,並且通过拷贝这些原型创建新的物件. 3.设计模式之Builder 汽车由车轮 方向盘 发动机很多部件组成,同时,将这些部件组装成汽车也是一件複杂的工作,Builder模式就是将这两种情况分开进行

学习php设计模式 php实现建造者模式_php技巧

建造者模式可以让一个产品的内部表象和和产品的生产过程分离开,从而可以生成具有不同内部表象的产品.一.Builder模式结构图   二.Builder模式中主要角色抽象建造者(Builder)角色:定义一个抽象接口,规范产品各个组成成分的建造(即规范具体建造者的方法实现).其中所规范的方法中必须包括建造方法和结果返回方法具体建造者(ConcreteBuilder)角色:实现抽象建造者角色所定义的方法.具体建造者与业务逻辑关联性较大,应用程序最终会通过调用此角色中所实现的建造方法按照业务逻辑创建产品

aspose.words 插入表格 设置表格宽度

问题描述 用aspose.words插入表格时,设置表格宽度为什么没有起作用呢.这样导致插入的表格样式不好看.voidInsertDataTable(Documentdoc,stringbookmark,DataTabledt){Aspose.Words.DocumentBuilderbuilder=newAspose.Words.DocumentBuilder(doc);boolisbool=builder.MoveToBookmark(bookmark);if(isbool){builder