Advertisement
Guest User

Untitled

a guest
Oct 31st, 2014
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.71 KB | None | 0 0
  1. // Реализация на C++.
  2.  
  3. #include <iostream>
  4. #include <memory>
  5. #include <string>
  6.  
  7. // Product
  8. class Pizza
  9. {
  10. private:
  11.     std::string dough;
  12.     std::string sauce;
  13.     std::string topping;
  14.  
  15. public:
  16.     Pizza() { }
  17.     ~Pizza() { }
  18.  
  19.     void SetDough(const std::string& d) { dough = d; }
  20.     void SetSauce(const std::string& s) { sauce = s; }
  21.     void SetTopping(const std::string& t) { topping = t; }
  22.  
  23.     void ShowPizza()
  24.     {
  25.         std::cout << " Yummy !!!" << std::endl
  26.         << "Pizza with Dough as " << dough
  27.         << ", Sauce as " << sauce
  28.         << " and Topping as " << topping
  29.         << " !!! " << std::endl;
  30.     }
  31. };
  32.  
  33. // Abstract Builder
  34. class PizzaBuilder
  35. {
  36. protected:
  37.     std::shared_ptr<Pizza> pizza;
  38. public:
  39.     PizzaBuilder() {}
  40.     virtual ~PizzaBuilder() {}
  41.     std::shared_ptr<Pizza> GetPizza() { return pizza; }
  42.  
  43.     void createNewPizzaProduct() { pizza.reset (new Pizza); }
  44.  
  45.     virtual void buildDough()=0;
  46.     virtual void buildSauce()=0;
  47.     virtual void buildTopping()=0;
  48.  
  49. };
  50.  
  51. // ConcreteBuilder
  52. class HawaiianPizzaBuilder : public PizzaBuilder
  53. {
  54. public:
  55.     HawaiianPizzaBuilder() : PizzaBuilder() {}
  56.     ~HawaiianPizzaBuilder(){}
  57.  
  58.     void buildDough() { pizza->SetDough("cross"); }
  59.     void buildSauce() { pizza->SetSauce("mild"); }
  60.     void buildTopping() { pizza->SetTopping("ham and pineapple"); }
  61. };
  62.  
  63. // ConcreteBuilder
  64. class SpicyPizzaBuilder : public PizzaBuilder
  65. {
  66. public:
  67.     SpicyPizzaBuilder() : PizzaBuilder() {}
  68.     ~SpicyPizzaBuilder() {}
  69.  
  70.     void buildDough() { pizza->SetDough("pan baked"); }
  71.     void buildSauce() { pizza->SetSauce("hot"); }
  72.     void buildTopping() { pizza->SetTopping("pepperoni and salami"); }
  73. };
  74.  
  75. // Director
  76. class Waiter
  77. {
  78. private:
  79.     PizzaBuilder* pizzaBuilder;
  80. public:
  81.     Waiter() : pizzaBuilder(NULL) {}
  82.     ~Waiter() { }
  83.  
  84.     void SetPizzaBuilder(PizzaBuilder* b) { pizzaBuilder = b; }
  85.     std::shared_ptr<Pizza> GetPizza() { return pizzaBuilder->GetPizza(); }
  86.     void ConstructPizza()
  87.     {
  88.         pizzaBuilder->createNewPizzaProduct();
  89.         pizzaBuilder->buildDough();
  90.         pizzaBuilder->buildSauce();
  91.         pizzaBuilder->buildTopping();
  92.     }
  93. };
  94.  
  95. // Клиент заказывает две пиццы.
  96. int main()
  97. {
  98.     Waiter waiter;
  99.  
  100.     HawaiianPizzaBuilder hawaiianPizzaBuilder;
  101.     waiter.SetPizzaBuilder (&hawaiianPizzaBuilder);
  102.     waiter.ConstructPizza();
  103.     std::shared_ptr<Pizza> pizza = waiter.GetPizza();
  104.     pizza->ShowPizza();
  105.  
  106.     SpicyPizzaBuilder spicyPizzaBuilder;
  107.     waiter.SetPizzaBuilder(&spicyPizzaBuilder);
  108.     waiter.ConstructPizza();
  109.     pizza = waiter.GetPizza();
  110.     pizza->ShowPizza();
  111.  
  112.     return EXIT_SUCCESS;
  113. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement