(十四)Head first design patterns建造者模式(c++)

建造者模式

建造者把产品细节的实现过程单独封装成类,完成产品本身和创建产品之间的解耦。每一个建造者都相对独立,因此在建造细节实现方面实现了灵活性和可扩展性。

建造者模式和工厂模式的区别:工厂模式关心把这个产品创建出来,而不关心其细节;建造者模式不仅需要把产品生产出来,还需要关心生产细节。

建造者的核心在于将建造者独立成不同的子类,以实现建造过程的灵活性和可扩展性。

示例代码

cpp 复制代码
#include<iostream>
#include<string>
using namespace std;


class Meal{
public:
    void setBurger(string str){
        burger = str;
    }
    void setFries(string str){
        fries = str;
    }
    void setDrink(string str){
        drink = str;
    }
    void print(){
        std::cout << burger << std::endl;
        std::cout << fries << std::endl;
        std::cout << drink << std::endl;
    }
private:
    string burger;
    string fries;
    string drink;
};
class MealBuilder{
public:
    virtual void buildBurger(){}
    virtual void buildFries(){}
    virtual void buildDrink(){}
    virtual Meal* getMeal(){
        return meal;
    }

    Meal* meal = new Meal();
};
class ChickenMealBuilder : public MealBuilder{
public:
    void buildBurger(){
        meal->setBurger("鸡肉汉堡");
    }
    void buildFries(){
        meal->setFries("中份薯条");
    }
    void buildDrink(){
        meal->setDrink("大杯果汁");
    }
};
class BeefBurgerMealBuilder : public MealBuilder{
public:
    void buildBurger(){
        meal->setBurger("牛肉汉堡");
    }
    void buildFries(){
        meal->setFries("大份薯条");
    }
    void buildDrink(){
        meal->setDrink("中杯可乐");
    }
};
class ShrimpMealBuilder : public MealBuilder{
public:
    void buildBurger(){
        meal->setBurger("虾肉汉堡");
    }
    void buildFries(){
        meal->setFries("小份薯条");
    }
    void buildDrink(){
        meal->setDrink("大杯芬达");
    }
};
class MealDirector{
public:
    void setMealBuilder(MealBuilder* mealBuilder){
        this->mealBuilder = mealBuilder;
    }
    Meal* getMeal(){ return mealBuilder->getMeal(); }
    void constructMeal(){
        mealBuilder->buildBurger();
        mealBuilder->buildFries();
        mealBuilder->buildDrink();
    }
private:
    MealBuilder* mealBuilder;
};
int main(){
    MealDirector* director = new MealDirector();
    director->setMealBuilder(new BeefBurgerMealBuilder());
    director->constructMeal();
    Meal* meal = director->getMeal();
    meal->print();
}
相关推荐
剧中有戏19 小时前
抽象工厂模式从入门到精通:一个多云存储案例的完整剖析(修订版)
设计模式
MC皮蛋侠客1 天前
Redis 系列(八):缓存设计模式与一致性——从 Cache Aside 到防雪崩
redis·缓存·设计模式
莫得感情 o1 天前
设计模式 18 · 状态模式
设计模式·状态模式
莫得感情 o1 天前
设计模式 17 · 责任链模式
设计模式·责任链模式
用户938515635071 天前
从零在浏览器里跑 DeepSeek-R1:WebGPU + Transformer.js 全链路实战
前端·设计模式·typescript
AI人工智能+电脑小能手2 天前
大白话说Java设计模式-04-工厂方法模式(业务实战篇)
java·设计模式·工厂方法模式·架构设计·代码解耦
今天的砖头有点烫手啊2 天前
AI Agent 开发实战(十):Agent 设计模式(ReAct / Plan-Execute / Reflection)
人工智能·react.js·设计模式
董员外2 天前
RAG 系统进化论(十):可运营 RAG,从原型到长期运行的知识系统
人工智能·后端·设计模式
莫得感情 o2 天前
设计模式 15 · 模板方法模式
设计模式·模板方法模式