建造者模式(builder)c++版本

本文通过C++实现,详细介绍了建造者模式的应用场景及其核心概念。通过创建瘦子和胖子两个不同的人物实例,展示了如何利用建造者模式将复杂对象的构建过程与其表示分离,从而能够灵活地构建出具有不同表示的对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

此为大话设计模式中的建造者模式的c++版本

/*
 * builder.cpp
 *
 *  Created on: Jul 25, 2017
 *      Author: clh01s@163.com
 *      生成器(建造者)模式
 *      将一个复杂的对象与它的表示分离,
 *      使得同样的构建过程可以创建不同的
 *      表示.
 */

#include <iostream>
#include <string>
//创建人的虚基类
class PersonBuilder
{
public:
    virtual ~PersonBuilder(){}
    //创建身体部分的纯虚函数
    virtual void BuildHead()=0;
    virtual void BuildBody()=0;
    virtual void BuildArmLeft()=0;
    virtual void BuildArmRight()=0;
    virtual void BuildLegLeft()=0;
    virtual void BuildLegRight()=0;
};

class PersonThinBuilder:public PersonBuilder
{
public:
    //创建身体的每个部位
    void BuildHead() override
    {
        std::cout<<"创建瘦子的头部"<<std::endl;
    }
    void BuildBody() override
    {
        std::cout<<"创建瘦子的身体"<<std::endl;
    }
    void BuildArmLeft() override
    {
        std::cout<<"创建瘦子的左手"<<std::endl;
    }
    void BuildArmRight() override
    {
        std::cout<<"创建瘦子的右手"<<std::endl;
    }
    void BuildLegLeft() override
    {
        std::cout<<"创建瘦子的左脚"<<std::endl;
    }
    void BuildLegRight() override
    {
        std::cout<<"创建瘦子的右脚"<<std::endl;
    }
};

class PersonFatBuilder:public PersonBuilder
{
public:
    //创建身体的每个部位
    void BuildHead() override
    {
        std::cout<<"创建胖子的头部"<<std::endl;
    }
    void BuildBody() override
    {
        std::cout<<"创建胖子的身体"<<std::endl;
    }
    void BuildArmLeft() override
    {
        std::cout<<"创建胖子的左手"<<std::endl;
    }
    void BuildArmRight() override
    {
        std::cout<<"创建胖子的右手"<<std::endl;
    }
    void BuildLegLeft() override
    {
        std::cout<<"创建胖子的左脚"<<std::endl;
    }
    void BuildLegRight() override
    {
        std::cout<<"创建胖子的右脚"<<std::endl;
    }
};

//指挥者类负责根据传入的参数来创建相应的肢体
class PersonDirector
{
public:
    //构造函数初始化指针
    PersonDirector(PersonBuilder *pb):_pb(pb){}

    //开始构造相应的肢体
    void CreatePerson()
    {
        _pb->BuildHead();
        _pb->BuildBody();
        _pb->BuildArmLeft();
        _pb->BuildArmRight();
        _pb->BuildLegLeft();
        _pb->BuildLegRight();
    }
    private:
    //用于保存PersonBuilder对象的指针
    PersonBuilder *_pb;
};

int main()
{
    //声明瘦子的实例
    PersonThinBuilder *pb = new PersonThinBuilder();
    //将实例传入指挥者类
    PersonDirector pd(pb);
    //调用创建函数
    pd.CreatePerson();
    return 0;
}

以下情况适用此模式(摘抄自《设计模式》):
1.当创建复杂对象的算法应该独立于该对象的组成部分以及他们的装配方式时
2.当构造过程必须允许被构造的对象有不同的表示时.

转载请注明源地址:http://blog.youkuaiyun.com/clh01s/article/details/76423516

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值