C++ 方式:
#include <string> #include <vector> #include <iostream>
using namespace std;
class Packing {
public: virtual string pack() { return ""; };
};
class Item {
public: virtual string name() { return ""; }; virtual Packing *packing() { return new Packing(); }; virtual float price() { return 0; };
};
class Wrapper: public Packing {
public: string pack() { return "Wrapper"; }
};
class Bottle: public Packing {
public: string pack() { return "Bottle"; }
};
class Burger: public Item {
public: Packing *packing() { return new Wrapper(); }
};
class ColdDrink: public Item {
public: Packing *packing() { return new Bottle(); }
};
class VegBurger: public Burger {
public: float price() { return 25.0f; } string name() { return "Veg Burger"; }
};
class ChickenBurger: public Burger {
public: float price() { return 50.5f; } string name() { return "Chicken Burger"; }
};
class Coke: public ColdDrink { public:
float price() { return 30.0f; } string name() { return "Coke"; }
};
class Pepsi: public ColdDrink { public:
float price() { return 35.0f; } string name() { return "Pepsi"; }
};
class Meal {
private: vector<Item *> items; public: void addItem(Item *item) { items.push_back(item); } float getCost() { float cost = 0.0f; for (Item *item : items) { cost += item -> price(); } return cost; } void showItems() { for (Item *item : items) { cout << "Item : " << item -> name() << ", Packing : " << item -> packing() -> pack() << ", Price : "; printf("%.1f
”, item -> price());
} }
};
class MealBuilder {
public: Meal *prepareVegMeal() { Meal *meal = new Meal(); meal -> addItem(new VegBurger()); meal -> addItem(new Coke()); return meal; } Meal *prepareNonVegMeal () { Meal *meal = new Meal(); meal -> addItem(new ChickenBurger()); meal -> addItem(new Pepsi()); return meal; }
};
int main() {
MealBuilder mealBuilder; Meal *vegMeal = mealBuilder.prepareVegMeal(); cout << "Veg Meal" << endl; vegMeal -> showItems(); cout << "Total Cost: " << vegMeal -> getCost() << endl; delete(vegMeal); Meal *nonVegMeal = mealBuilder.prepareNonVegMeal(); cout << "
Non-Veg Meal” << endl;
nonVegMeal -> showItems(); cout << "Total Cost: " << nonVegMeal -> getCost() << endl; delete(nonVegMeal);
}
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.bianchenghao6.com/h6javajc/4978.html