美文网首页
建造者模式 C++实现

建造者模式 C++实现

作者: 假程序员 | 来源:发表于2019-03-12 01:50 被阅读0次
//
//  main.cpp
//  builder_pattern
//
//  Created by apple on 2019/3/12.
//  Changed by apple on 2019/3/31
//  Copyright © 2019年 apple. All rights reserved.
//

#include <iostream>
#include <string>
using std::cout;
using std::endl;

class IProduct//抽象产品类
{
public:
    int num = 0;
    virtual ~IProduct() {}
    virtual void product() {this->num++;}
    virtual void test() = 0;
};
class Product:public IProduct//实际产品
{
public:
    void test(){cout<<"level "<<this->num<<" product succeed!"<<endl;}
};

class IBuilder//建造者接口定义了建造者的建造方法
{
public:
    IProduct *product = NULL;
    virtual void first_step() = 0;
    virtual void second_step() = 0;
    virtual void third_step() = 0;
    virtual IProduct *GetProduct() = 0;
    virtual ~IBuilder() {}
};
class Builder_A:public IBuilder//A建造者
{//建造者可以拥有很多用于构造产品的方法
public:
    Builder_A() {this->product = new Product();}
    void first_step(){product->product();cout<<"Builder_A first_step"<<endl;}
    void second_step(){product->product();cout<<"Builder_A second_step"<<endl;}
    void third_step(){product->product();cout<<"Builder_A third_step"<<endl;}
    IProduct *GetProduct(){
        return product;
    }
    ~Builder_A() {delete product;}
};
class Builder_B:public IBuilder//B_建造者
{//建造者可以拥有很多用于构造产品的方法
public:
    Builder_B() {this->product = new Product();}
    void first_step(){product->product();cout<<"Builder_B first_step"<<endl;}
    void second_step(){product->product();cout<<"Builder_B second_step"<<endl;}
    void third_step(){}//注意third_step方法的区别
    IProduct *GetProduct(){
        return product;
    }
    ~Builder_B() {delete product;}
};
class Director//导演类,使建造者执行命令
{
private:
    IBuilder *builder;
public:
    void setBuilder(IBuilder *builder){this->builder = builder;}
    void command_A(){
        builder->first_step();
        builder->second_step();
        builder->third_step();
        this->builder->GetProduct();
        cout<<"Director command succeed by command_A."<<endl;
    }
    void command_B(){
        builder->first_step();
        builder->second_step();
        builder->third_step();
        this->builder->GetProduct();
        cout<<"Director command succeed by command_B."<<endl;
    }
};

int main(int argc, const char * argv[]) {
    Director director;//栈上导演
    IBuilder *builder = NULL;//堆上建造者
    
    builder = new Builder_A();
    director.setBuilder(builder);
    director.command_A();
    builder->GetProduct()->test();
    delete builder;
    builder = NULL;
    
    builder = new Builder_B();
    director.setBuilder(builder);
    director.command_B();
    builder->GetProduct()->test();
    delete builder;
    builder = NULL;
    return 0;
}
Builder_A first_step
Builder_A second_step
Builder_A third_step
Director command succeed by command_A.
level 3 product succeed!
Builder_B first_step
Builder_B second_step
Director command succeed by command_B.
level 2 product succeed!
Program ended with exit code: 0

相关文章

  • Builder Pattern in Java

    建造者模式:建造者模式定义建造者模式应用场景实现案例Jdk中的建造者模式建造者模式的优点建造者模式的缺点 建造者模...

  • 建造者模式(部件构造)

    目录 建造者模式的理念 从 POJO 到建造者模式的思考 怎么来实现建造者模式 建造者模式在Android源码中的...

  • 建造者模式 C++实现

  • 一、设计模式(构建模式)——03建造模式与原型模式

    建造者模式 建造型模式用于创建过程稳定,但配置多变的对象。 建造模式的实现要点: 在建造者模式中,指挥者是直接与客...

  • 创建型-Builder

    Builder 模式,中文翻译为建造者模式或者构建者模式,也有人叫它生成器模式。实际上,建造者模式的原理和代码实现...

  • c++建造者模式

    1.建造者模式简介    建造者模式将一个复杂对象的构造过程与其表现分离,这样,同一个构造过程可用于创建多个不同的...

  • 静态内部类2

    利用静态内部类实现建造者模式,建造者模式是用静态内部类创建外部类对象,将整个建造过程和用户看到的界面分开来。 程序...

  • 设计模式(4) 建造者模式

    什么是建造者模式 经典建造者模式的优缺点 对建造者模式的扩展 什么是建造者模式 建造者模式将一个复杂的对象的构建与...

  • 【C++设计模式】建造者模式

  • 【设计模式】之建造者Builder模式

    建造者模式 什么是建造者模式? 建造者模式属于创建型模式的一员,可以控制对象的实例化过程。建造者模式简化了复杂对象...

网友评论

      本文标题:建造者模式 C++实现

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