From a44ab077357e05af159983a620f9a29300715f16 Mon Sep 17 00:00:00 2001 From: Alexander Zhirov Date: Tue, 2 Nov 2021 21:18:09 +0300 Subject: [PATCH] factory without ingredients --- lesson_4/ChicagoPizzaStore.hpp | 43 ++++++++++++++ lesson_4/ChicagoStyleCheesePizza.hpp | 28 +++++++++ lesson_4/ChicagoStyleClamPizza.hpp | 29 ++++++++++ lesson_4/ChicagoStylePepperoniPizza.hpp | 32 +++++++++++ lesson_4/ChicagoStylePizza.hpp | 14 +++++ lesson_4/ChicagoStyleVeggiePizza.hpp | 31 ++++++++++ lesson_4/NYPizzaStore.hpp | 43 ++++++++++++++ lesson_4/NYStyleCheesePiza.hpp | 23 ++++++++ lesson_4/NYStyleClamPizza.hpp | 24 ++++++++ lesson_4/NYStylePepperoniPizza.hpp | 28 +++++++++ lesson_4/NYStylePiza.hpp | 14 +++++ lesson_4/NYStyleVeggiePizza.hpp | 27 +++++++++ lesson_4/Pizza.hpp | 75 +++++++++++++++++++++++++ lesson_4/PizzaStore.hpp | 30 ++++++++++ lesson_4/main.cpp | 33 +++++++++++ 15 files changed, 474 insertions(+) create mode 100644 lesson_4/ChicagoPizzaStore.hpp create mode 100644 lesson_4/ChicagoStyleCheesePizza.hpp create mode 100644 lesson_4/ChicagoStyleClamPizza.hpp create mode 100644 lesson_4/ChicagoStylePepperoniPizza.hpp create mode 100644 lesson_4/ChicagoStylePizza.hpp create mode 100644 lesson_4/ChicagoStyleVeggiePizza.hpp create mode 100644 lesson_4/NYPizzaStore.hpp create mode 100644 lesson_4/NYStyleCheesePiza.hpp create mode 100644 lesson_4/NYStyleClamPizza.hpp create mode 100644 lesson_4/NYStylePepperoniPizza.hpp create mode 100644 lesson_4/NYStylePiza.hpp create mode 100644 lesson_4/NYStyleVeggiePizza.hpp create mode 100644 lesson_4/Pizza.hpp create mode 100644 lesson_4/PizzaStore.hpp create mode 100644 lesson_4/main.cpp diff --git a/lesson_4/ChicagoPizzaStore.hpp b/lesson_4/ChicagoPizzaStore.hpp new file mode 100644 index 0000000..0e731aa --- /dev/null +++ b/lesson_4/ChicagoPizzaStore.hpp @@ -0,0 +1,43 @@ +/* + * ChicagoPizzaStore.hpp + * + * Created on: 2 нояб. 2021 г. + * Author: alexander + */ + +#pragma once + +#include "PizzaStore.hpp" +#include "ChicagoStylePizza.hpp" +#include "ChicagoStyleCheesePizza.hpp" +#include "ChicagoStyleVeggiePizza.hpp" +#include "ChicagoStyleClamPizza.hpp" +#include "ChicagoStylePepperoniPizza.hpp" + +class ChicagoPizzaStore: public PizzaStore +{ +public: + Pizza createPizza(const std::string &type) const override + { + if (type == "cheese") + { + return ChicagoStyleCheesePizza(); + } + else if (type == "veggie") + { + return ChicagoStyleVeggiePizza(); + } + else if (type == "clam") + { + return ChicagoStyleClamPizza(); + } + else if (type == "pepperoni") + { + return ChicagoStylePepperoniPizza(); + } + else + { + return ChicagoStylePizza(); + } + } +}; diff --git a/lesson_4/ChicagoStyleCheesePizza.hpp b/lesson_4/ChicagoStyleCheesePizza.hpp new file mode 100644 index 0000000..b68ba4d --- /dev/null +++ b/lesson_4/ChicagoStyleCheesePizza.hpp @@ -0,0 +1,28 @@ +/* + * ChicagoStyleCheesePizza.hpp + * + * Created on: 2 нояб. 2021 г. + * Author: alexander + */ + +#pragma once + +#include "Pizza.hpp" + +class ChicagoStyleCheesePizza: public Pizza +{ +public: + ChicagoStyleCheesePizza() + { + setName("Chicago Style Deep Dish Cheese Pizza"); + setDough("Extra Thick Crust Dough"); + setSauce("Plum Tomato Sauce"); + + addTopping("Shredded Mozzarella Cheese"); + } + + void cut() const override + { + std::cout << "Cutting the pizza into square slices" << std::endl; + } +}; diff --git a/lesson_4/ChicagoStyleClamPizza.hpp b/lesson_4/ChicagoStyleClamPizza.hpp new file mode 100644 index 0000000..b8d5c12 --- /dev/null +++ b/lesson_4/ChicagoStyleClamPizza.hpp @@ -0,0 +1,29 @@ +/* + * ChicagoStyleClamPizza.hpp + * + * Created on: 2 нояб. 2021 г. + * Author: alexander + */ + +#pragma once + +#include "Pizza.hpp" + +class ChicagoStyleClamPizza: public Pizza +{ +public: + ChicagoStyleClamPizza() + { + setName("Chicago Style Clam Pizza"); + setDough("Extra Thick Crust Dough"); + setSauce("Plum Tomato Sauce"); + + addTopping("Shredded Mozzarella Cheese"); + addTopping("Frozen Clams from Chesapeake Bay"); + } + + void cut() const override + { + std::cout << "Cutting the pizza into square slices" << std::endl; + } +}; diff --git a/lesson_4/ChicagoStylePepperoniPizza.hpp b/lesson_4/ChicagoStylePepperoniPizza.hpp new file mode 100644 index 0000000..0922f86 --- /dev/null +++ b/lesson_4/ChicagoStylePepperoniPizza.hpp @@ -0,0 +1,32 @@ +/* + * ChicagoStylePepperoniPizza.hpp + * + * Created on: 2 нояб. 2021 г. + * Author: alexander + */ + +#pragma once + +#include "Pizza.hpp" + +class ChicagoStylePepperoniPizza: public Pizza +{ +public: + ChicagoStylePepperoniPizza() + { + setName("Chicago Style Pepperoni Pizza"); + setDough("Extra Thick Crust Dough"); + setSauce("Plum Tomato Sauce"); + + addTopping("Shredded Mozzarella Cheese"); + addTopping("Black Olives"); + addTopping("Spinach"); + addTopping("Eggplant"); + addTopping("Sliced Pepperoni"); + } + + void cut() const override + { + std::cout << "Cutting the pizza into square slices" << std::endl; + } +}; diff --git a/lesson_4/ChicagoStylePizza.hpp b/lesson_4/ChicagoStylePizza.hpp new file mode 100644 index 0000000..0545efe --- /dev/null +++ b/lesson_4/ChicagoStylePizza.hpp @@ -0,0 +1,14 @@ +/* + * ChicagoStylePizza.hpp + * + * Created on: 2 нояб. 2021 г. + * Author: alexander + */ + +#pragma once + +#include "Pizza.hpp" + +class ChicagoStylePizza: public Pizza +{ +}; diff --git a/lesson_4/ChicagoStyleVeggiePizza.hpp b/lesson_4/ChicagoStyleVeggiePizza.hpp new file mode 100644 index 0000000..8a44a0f --- /dev/null +++ b/lesson_4/ChicagoStyleVeggiePizza.hpp @@ -0,0 +1,31 @@ +/* + * ChicagoStyleVeggiePizza.hpp + * + * Created on: 2 нояб. 2021 г. + * Author: alexander + */ + +#pragma once + +#include "Pizza.hpp" + +class ChicagoStyleVeggiePizza: public Pizza +{ +public: + ChicagoStyleVeggiePizza() + { + setName("Chicago Deep Dish Veggie Pizza"); + setDough("Extra Thick Crust Dough"); + setSauce("Plum Tomato Sauce"); + + addTopping("Shredded Mozzarella Cheese"); + addTopping("Black Olives"); + addTopping("Spinach"); + addTopping("Eggplant"); + } + + void cut() const override + { + std::cout << "Cutting the pizza into square slices" << std::endl; + } +}; diff --git a/lesson_4/NYPizzaStore.hpp b/lesson_4/NYPizzaStore.hpp new file mode 100644 index 0000000..c07c72e --- /dev/null +++ b/lesson_4/NYPizzaStore.hpp @@ -0,0 +1,43 @@ +/* + * NYPizzaStore.hpp + * + * Created on: 2 нояб. 2021 г. + * Author: alexander + */ + +#pragma once + +#include "PizzaStore.hpp" +#include "NYStylePiza.hpp" +#include "NYStyleCheesePiza.hpp" +#include "NYStyleVeggiePizza.hpp" +#include "NYStyleClamPizza.hpp" +#include "NYStylePepperoniPizza.hpp" + +class NYPizzaStore: public PizzaStore +{ +public: + Pizza createPizza(const std::string &type) const override + { + if (type == "cheese") + { + return NYStyleCheesePiza(); + } + else if (type == "veggie") + { + return NYStyleVeggiePizza(); + } + else if (type == "clam") + { + return NYStyleClamPizza(); + } + else if (type == "pepperoni") + { + return NYStylePepperoniPizza(); + } + else + { + return NYStylePiza(); + } + } +}; diff --git a/lesson_4/NYStyleCheesePiza.hpp b/lesson_4/NYStyleCheesePiza.hpp new file mode 100644 index 0000000..7c32227 --- /dev/null +++ b/lesson_4/NYStyleCheesePiza.hpp @@ -0,0 +1,23 @@ +/* + * NYStyleCheesePiza.hpp + * + * Created on: 2 нояб. 2021 г. + * Author: alexander + */ + +#pragma once + +#include "Pizza.hpp" + +class NYStyleCheesePiza: public Pizza +{ +public: + NYStyleCheesePiza() + { + setName("NY Style Sauce and Cheese Pizza"); + setDough("Thin Crust Dough"); + setSauce("Marinara Sauce"); + + addTopping("Grated Reggiano Cheese"); + } +}; diff --git a/lesson_4/NYStyleClamPizza.hpp b/lesson_4/NYStyleClamPizza.hpp new file mode 100644 index 0000000..3bad4d4 --- /dev/null +++ b/lesson_4/NYStyleClamPizza.hpp @@ -0,0 +1,24 @@ +/* + * NYStyleClamPizza.hpp + * + * Created on: 2 нояб. 2021 г. + * Author: alexander + */ + +#pragma once + +#include "Pizza.hpp" + +class NYStyleClamPizza: public Pizza +{ +public: + NYStyleClamPizza() + { + setName("NY Style Clam Pizza"); + setDough("Thin Crust Dough"); + setSauce("Marinara Sauce"); + + addTopping("Grated Reggiano Cheese"); + addTopping("Fresh Clams from Long Island Sound"); + } +}; diff --git a/lesson_4/NYStylePepperoniPizza.hpp b/lesson_4/NYStylePepperoniPizza.hpp new file mode 100644 index 0000000..0118355 --- /dev/null +++ b/lesson_4/NYStylePepperoniPizza.hpp @@ -0,0 +1,28 @@ +/* + * NYStylePepperoniPizza.hpp + * + * Created on: 2 нояб. 2021 г. + * Author: alexander + */ + +#pragma once + +#include "Pizza.hpp" + +class NYStylePepperoniPizza: public Pizza +{ +public: + NYStylePepperoniPizza() + { + setName("NY Style Pepperoni Pizza"); + setDough("Thin Crust Dough"); + setSauce("Marinara Sauce"); + + addTopping("Grated Reggiano Cheese"); + addTopping("Sliced Pepperoni"); + addTopping("Garlic"); + addTopping("Onion"); + addTopping("Mushrooms"); + addTopping("Red Pepper"); + } +}; diff --git a/lesson_4/NYStylePiza.hpp b/lesson_4/NYStylePiza.hpp new file mode 100644 index 0000000..019c802 --- /dev/null +++ b/lesson_4/NYStylePiza.hpp @@ -0,0 +1,14 @@ +/* + * NYStylePiza.hpp + * + * Created on: 2 нояб. 2021 г. + * Author: alexander + */ + +#pragma once + +#include "Pizza.hpp" + +class NYStylePiza: public Pizza +{ +}; diff --git a/lesson_4/NYStyleVeggiePizza.hpp b/lesson_4/NYStyleVeggiePizza.hpp new file mode 100644 index 0000000..942b0d3 --- /dev/null +++ b/lesson_4/NYStyleVeggiePizza.hpp @@ -0,0 +1,27 @@ +/* + * NYStyleVeggiePizza.hpp + * + * Created on: 2 нояб. 2021 г. + * Author: alexander + */ + +#pragma once + +#include "Pizza.hpp" + +class NYStyleVeggiePizza: public Pizza +{ +public: + NYStyleVeggiePizza() + { + setName("NY Style Veggie Pizza"); + setDough("Thin Crust Dough"); + setSauce("Marinara Sauce"); + + addTopping("Grated Reggiano Cheese"); + addTopping("Garlic"); + addTopping("Onion"); + addTopping("Mushrooms"); + addTopping("Red Pepper"); + } +}; diff --git a/lesson_4/Pizza.hpp b/lesson_4/Pizza.hpp new file mode 100644 index 0000000..a136117 --- /dev/null +++ b/lesson_4/Pizza.hpp @@ -0,0 +1,75 @@ +/* + * Pizza.hpp + * + * Created on: 2 нояб. 2021 г. + * Author: alexander + */ + +#pragma once + +#include +#include + +class Pizza +{ +private: + std::string name; + std::string dough; + std::string sauce; + std::list toppings; +public: + + virtual void prepare() const + { + std::cout << "Preparing " << name << std::endl; + std::cout << "Tossing dough..." << std::endl; + std::cout << "Adding sauce..." << std::endl; + std::cout << "Adding toppings:" << std::endl; + for (const std::string &topping : toppings) + { + std::cout << '\t' << topping << std::endl; + } + } + + virtual void bake() const + { + std::cout << "Bake for 25 minutes at 350" << std::endl; + } + + virtual void cut() const + { + std::cout << "Cutting the pizza into diagonal slices" << std::endl; + } + + virtual void box() const + { + std::cout << "Place pizza in official PizzaStore box" << std::endl; + } + + virtual std::string getName() const + { + return name; + } + + virtual void setName(std::string name) + { + this->name = name; + } + + virtual void setDough(std::string dough) + { + this->dough = dough; + } + + virtual void setSauce(std::string sauce) + { + this->sauce = sauce; + } + + virtual void addTopping(std::string topping) + { + toppings.push_back(topping); + } + + virtual ~Pizza() {} +}; diff --git a/lesson_4/PizzaStore.hpp b/lesson_4/PizzaStore.hpp new file mode 100644 index 0000000..1055c6c --- /dev/null +++ b/lesson_4/PizzaStore.hpp @@ -0,0 +1,30 @@ +/* + * PizzaStore.hpp + * + * Created on: 2 нояб. 2021 г. + * Author: alexander + */ + +#pragma once + +#include "Pizza.hpp" + +class PizzaStore +{ +public: + virtual Pizza orderPizza(const std::string &type) const + { + Pizza pizza = createPizza(type); + + pizza.prepare(); + pizza.bake(); + pizza.cut(); + pizza.box(); + + return pizza; + } + + virtual Pizza createPizza(const std::string &type) const = 0; + + virtual ~PizzaStore() {} +}; diff --git a/lesson_4/main.cpp b/lesson_4/main.cpp new file mode 100644 index 0000000..742e61a --- /dev/null +++ b/lesson_4/main.cpp @@ -0,0 +1,33 @@ +/* + * main.cpp + * + * Created on: 2 нояб. 2021 г. + * Author: alexander + */ + +#include +#include "NYPizzaStore.hpp" +#include "ChicagoPizzaStore.hpp" + +int main() +{ + std::vector pizzaTypes {"cheese", "clam", "pepperoni", "veggie"}; + + PizzaStore *nyStore = new NYPizzaStore(); + PizzaStore *chicagoStore = new ChicagoPizzaStore(); + Pizza pizza; + + for (const std::string &pizzaType : pizzaTypes) + { + pizza = nyStore->orderPizza(pizzaType); + std::cout << "Ethan ordered a " << pizza.getName() << std::endl; + + pizza = chicagoStore->orderPizza(pizzaType); + std::cout << "Joel ordered a " << pizza.getName() << std::endl; + } + + delete nyStore; + delete chicagoStore; + + return 0; +}