美文网首页工作生活
设计模式03 - 建造者模式

设计模式03 - 建造者模式

作者: 第八天的蝉啊 | 来源:发表于2019-07-02 21:04 被阅读0次
1. 目的:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
  • 隔离了构建的步骤和具体的实现,为产品的具体实现提供了灵活度
  • 封装和抽象了每个步骤的实现,实现了依赖倒转原则
  • 封装了具体的步骤,减少了代码的冗余


2. 代码实现
//Builder.h
#ifndef _BUILDER_H_
#define _BUILDER_H_

#include <stdio.h>

class Product{
public:
    Product();
    ~Product();

    void setPartA(int param);
    void setPartB(int param);
    void setPartC(int param);

    void show();

private:
    int partA;
    int partB;
    int partC;
};

class AbstractBuilder{
public:
    AbstractBuilder();
    virtual ~AbstractBuilder();

    virtual void createProduct() = 0;
    virtual void buildPartA(int param) = 0;
    virtual void buildPartB(int param) = 0;
    virtual void buildPartC(int param) = 0;

    virtual Product* getProduct() = 0;
};

class Builder: public AbstractBuilder{
public:
    Builder();
    ~Builder();

    void createProduct();
    void buildPartA(int param);
    void buildPartB(int param);
    void buildPartC(int param);

    Product* getProduct();

private:
    Product* curProduct;

};
#endif
 

//Builder.cpp
#include "Builder.h"

Product::Product() { }

Product::~Product() { }

void Product::setPartA(int param)
{
    partA = param;
}

void Product::setPartB(int param)
{
    partB = param;
}

void Product::setPartC(int param)
{
    partC = param;
}

void Product::show()
{
    fprintf(stderr,"partA = %d  partB = %d  partC = %d\n",partA,partB,partC);
}

AbstractBuilder::AbstractBuilder() { }

AbstractBuilder::~AbstractBuilder() { }

Builder::Builder()
:curProduct(NULL) { }

Builder::~Builder() { }

void Builder::createProduct()
{
    fprintf(stderr,"创建一个产品空壳\n");
    curProduct = new Product();
}

void Builder::buildPartA(int param)
{
    fprintf(stderr,"正在构建产品的A部分\n");
    curProduct->setPartA(param);
}

void Builder::buildPartB(int param)
{
    fprintf(stderr,"正在构建产品的B部分\n");
    curProduct->setPartB(param);
}

void Builder::buildPartC(int param)
{
    fprintf(stderr,"正在构建产品的C部分\n");
    curProduct->setPartC(param);
}

Product* Builder::getProduct()
{
    return curProduct;
}
 
//Director.h
#ifndef _DIRECTOR_H_
#define _DIRECTOR_H_

#include "Builder.h"

class Director
{
public:
    Director(AbstractBuilder* builder);
    ~Director();

    void construct();

private:
    AbstractBuilder* curBuilder;
};

#endif

//Director.cpp
#include "Director.h"

Director::Director(AbstractBuilder* builder)
{
    curBuilder = builder;
}

Director::~Director() { }

void Director::construct()
{
    if (!curBuilder)
        return;

    curBuilder->createProduct();
    curBuilder->buildPartA(1);
    curBuilder->buildPartB(2);
    curBuilder->buildPartC(3);
}

//client.cpp
#include "Director.h"

int main()
{
    AbstractBuilder* builder = new Builder();
    Director* director = new Director(builder);

    director->construct();
    
    Product* product = builder->getProduct();
    product->show();
    return 0;
}

相关文章

  • 设计模式 - 目录

    设计模式01 - 单例模式 设计模式02 - 工厂模式 设计模式03 - 建造者模式 设计模式04 - 适配器模式...

  • Retrofit

    Retrofit设计模式 动态代理,装饰模式,建造者模式,抽象工厂模式,适配器模式 建造者模式创建Retrofit...

  • Android中涉及的模式

    我的Java设计模式-建造者模式 我的Java设计模式-观察者模式 重学设计模式之单例模式

  • 设计模式之建造者模式

    设计模式之建造者模式 Intro 简介 建造者模式: 建造者模式隐藏了复杂对象的创建过程,它把复杂对象的创建过程加...

  • 设计模式03 - 建造者模式

    1. 目的:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 隔离了构建的步骤和具体的实现...

  • 设计模式之建造者模式

    设计模式之建造者模式 1. 模式定义 建造者模式又可以成为生成器模式,它属于对象创建型模式。建造者模式将一个复杂对...

  • java设计模式--建造者模式

    java设计模式--建造者模式 建造者模式定义 建造者模式:是将复杂对象的构建与表示进行分离,使同样的构建过程会有...

  • 【Java设计模式】--建造者模式

    建造者模式(Bulider模式) 一、什么是建造者模式 建造者模式是设计模式的一种,将一个复杂对象的构建与它的表示...

  • 建造者设计模式-Builder design pattern

    建造者设计模式是创建型设计模式的一种。创建型设计模式处理对象创建的问题。 建造者设计模式,用来构建需要经过若干个建...

  • 设计模式

    Java 设计模式情景分析 ——单例模式 Java 设计模式情景分析——建造者模式 Java 设计模式情景分析——...

网友评论

    本文标题:设计模式03 - 建造者模式

    本文链接:https://www.haomeiwen.com/subject/epfthctx.html