zoukankan      html  css  js  c++  java
  • 设计模式-Builder模式(创建型模式)

    //以下代码来源: 设计模式精解-GoF 23种设计模式解析附C++实现源码

    //Product.h

    #pragma once
    class Product {
    public:
        Product();
        ~Product();
        void ProducePart();
    protected:
    private:
    };
    
    class ProductPart {
    public:
        ProductPart();
        ~ProductPart();
        ProductPart* buildPart();
    protected:
    private:
    
    };

    //Product.cpp

    #include"Product.h"
    #include<iostream>
    
    Product::Product()
    {
        ProducePart();
        std::cout << "return a Product." << std::endl;
    }
    Product::~Product()
    {
    
    }
    void Product::ProducePart()
    {
        std::cout << "Build part of product." << std::endl;
    }
    
    ProductPart::ProductPart(){}
    ProductPart::~ProductPart(){}
    ProductPart* ProductPart::buildPart()
    {
        return new ProductPart;
    }

    //Build.h

    #pragma once
    #include<string>
    class Product;
    class Builder {
    public:
        virtual ~Builder();
        virtual void BuildPartA(const std::string& buildPara) = 0;
        virtual void BuildPartB(const std::string& buildPara) = 0;
        virtual void BuildPartC(const std::string& buildPara) = 0;
        virtual Product* getProduct() = 0;
    protected:
        Builder();
    private:
    };
    
    class ConcreateBuilder :public Builder {
    public:
        ConcreateBuilder();
        virtual ~ConcreateBuilder();
        void BuildPartA(const std::string& buildPara);
        void BuildPartB(const std::string& buildPara);
        void BuildPartC(const std::string& buildPara);
        Product* getProduct();
    protected:
    private:
    };

    //Build.cpp

    #include"Build.h"
    #include"Product.h"
    #include<iostream>
    
    Builder::Builder(){}
    Builder::~Builder(){}
    ConcreateBuilder::ConcreateBuilder(){}
    ConcreateBuilder::~ConcreateBuilder(){}
    void ConcreateBuilder::BuildPartA(const std::string& buildPara)
    {
        std::cout << "Step1: Build Part1...." << buildPara << std::endl;
    }
    void ConcreateBuilder::BuildPartB(const std::string& buildPara)
    {
        std::cout << "Step2: Build Part2..." << buildPara << std::endl;
    }
    void ConcreateBuilder::BuildPartC(const std::string& buildPara)
    {
        std::cout << "Step3: Build Part3..." << buildPara << std::endl;
    }
    Product* ConcreateBuilder::getProduct()
    {
        BuildPartA("Pre-Defined");
        BuildPartB("Pre-Defined");
        BuildPartC("Pre-Defined");
        return new Product();
    }

    //Director.h

    #pragma once
    class Builder;
    class Director {
    public:
        ~Director();
        Director(Builder* bld);
        void Construct();
    protected:
    private:
        Builder* _bld;
    };

    //Director.cpp

    #include"Director.h"
    #include"Build.h"
    
    Director::~Director()
    {
    
    }
    Director::Director(Builder* bld)
    {
        _bld = bld;
    }
    void Director::Construct()
    {
        _bld->BuildPartA("User-Defined");
        _bld->BuildPartB("User-Defined");
        _bld->BuildPartC("User-Defined");
    }

    //main.cpp

    #include"Build.h"
    #include"Director.h"
    #include"Product.h"
    
    int main(int args, char* argv)
    {
        Director* dir = new Director(new ConcreateBuilder());
        dir->Construct();
    
        return 0;
    }
  • 相关阅读:
    列式存储hbase系统架构学习
    使用Phoenix通过sql语句更新操作hbase数据
    分布式实时日志系统(四) 环境搭建之centos 6.4下hbase 1.0.1 分布式集群搭建
    布式实时日志系统(三) 环境搭建之centos 6.4下hadoop 2.5.2完全分布式集群搭建最全资料
    GDI+绘制五星红旗
    C#模拟登录后请求查询
    ubuntu下安装mysql
    配置nginx实现windows/iis应用负载均衡
    23种设计模式之原型模式(Prototype)
    23种设计模式之访问者模式(Visitor)
  • 原文地址:https://www.cnblogs.com/fourmi/p/12075149.html
Copyright © 2011-2022 走看看