建造者模式

#include <iostream>

#include <string>

using namespace std;

class Meal

{

public :

                 void setFood(string food){

                                 this ->food=food ;

                }

                 string getFood(){

                                 return this ->food;

                }

                 void setDrink(string drink){

                                 this ->drink=drink ;

                }

                 string getDrink(){

                                 return this ->drink;

                }

private :

                 string food;

                 string drink;

};

class MealBuilder

{

public :

                MealBuilder(){

        meal= new Meal ();

                }

                 virtual void buildFood()=0;

                 virtual void buildDrink()=0;

                 Meal * getMeal(){

                                 return meal;

                }

                

protected :

                 Meal * meal;

};

class SubMealBuilderA : public MealBuilder

{

public :

                 void buildFood(){

                                meal->setFood( "一个鸡腿堡" );

                }

                 void buildDrink(){

                                meal->setDrink( "一杯可乐" );

                }

};

class SubMealBuilderB : public MealBuilder

{

public :

                 void buildFood(){

                                meal->setFood( "一个鸡肉卷" );

                }

                 void buildDrink(){

                                meal->setDrink( "一杯果汁" );

                }

};


class KFCWaiter

{

public :

                 void setMealBuilder( MealBuildermb ){

                                 this ->mb=mb ;

                }

                 Meal * construct()

                {

                                mb->buildFood();

                                mb->buildDrink();

                                 return mb->getMeal();

                }

private :

                 MealBuilder * mb;

};

int main()

{

                 MealBuilder * ma=new SubMealBuilderA();

                 KFCWaiter * waiter=new KFCWaiter();

                waiter->setMealBuilder(ma);

                 Meal *meal=waiter->construct();

                cout<< "套装组成A:" <<endl;

                 string food=meal->getFood();

                 string drink=meal->getDrink();

                cout<<food<<endl;

                cout<<drink<<endl;

                 delete meal;

                 delete ma;

                 MealBuilder *mb=new SubMealBuilderB();

                waiter->setMealBuilder(mb);

                 Meal * mealb=waiter->construct();

                cout<< "套装组成B:" <<endl;

                 string foodb=meal->getFood();

                 string drinkb=meal->getDrink();

                cout<<foodb<<endl;

                cout<<drinkb<<endl;

                 delete mealb;

                 delete mb;

                 delete waiter;

                 return 0;

}


转载于:https://my.oschina.net/OSChinaKANON/blog/415385

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值