Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Std::string topping; // гарнир





public:

Pizza() { }

~Pizza() { }

void SetDough(const std::string& d) { dough = d; };

void SetSauce(const std::string& s) { sauce = s; };

void SetTopping(const std::string& t) { topping = t; }

void ShowPizza()

{

Std::cout << " Yummy!!!" << std::endl

Lt;< "Pizza with Dough as " << dough

Lt;< ", Sauce as " << sauce

Lt;< " and Topping as " << topping

<< "!!! " << std::endl;

}

};

Abstract Builder

Class PizzaBuilder

{

protected:

std::auto_ptr<Pizza> pizza;

public:

PizzaBuilder() {}

virtual ~PizzaBuilder() {}

std::auto_ptr<Pizza> GetPizza() { return pizza; }

void createNewPizzaProduct() { pizza.reset (new Pizza); }

virtual void buildDough()=0;

virtual void buildSauce()=0;

virtual void buildTopping()=0;

};

ConcreteBuilder 1

Class HawaiianPizzaBuilder: public PizzaBuilder

{

public:

HawaiianPizzaBuilder(): PizzaBuilder() {}

~HawaiianPizzaBuilder(){}

void buildDough() { pizza->SetDough("cross"); }

void buildSauce() { pizza->SetSauce("mild"); }

void buildTopping() { pizza->SetTopping("ham and pineapple"); }

};

ConcreteBuilder 2

Class SpicyPizzaBuilder: public PizzaBuilder

{

public:

SpicyPizzaBuilder(): PizzaBuilder() {}

~SpicyPizzaBuilder() {}

void buildDough() { pizza->SetDough("pan baked"); }

void buildSauce() { pizza->SetSauce("hot"); }

void buildTopping() { pizza->SetTopping("pepperoni and salami"); }

};

// Director (Распорядитель)

Class Waiter // официант

{

private:

PizzaBuilder* pizzaBuilder;

public:

Waiter(): pizzaBuilder(NULL) {}

~Waiter() { }

void SetPizzaBuilder(PizzaBuilder* b) { pizzaBuilder = b; }

std::auto_ptr<Pizza> GetPizza() { return pizzaBuilder->GetPizza(); }

void ConstructPizza()

{

pizzaBuilder->createNewPizzaProduct();

pizzaBuilder->buildDough();

pizzaBuilder->buildSauce();

pizzaBuilder->buildTopping();

}

};

Клиент заказывает две пиццы.

int main()

{

Waiter waiter; // устанавливается общий Распорядитель

HawaiianPizzaBuilder hawaiianPizzaBuilder; //конкретный строитель 1

Waiter.SetPizzaBuilder (&hawaiianPizzaBuilder); // сообщаем его

Распорядителю

Waiter.ConstructPizza(); // создание продукта методами конкретного

Продукта

waiter.GetPizza() -> ShowPizza();

SpicyPizzaBuilder spicyPizzaBuilder;

waiter.SetPizzaBuilder(&spicyPizzaBuilder);

waiter.ConstructPizza();

waiter.GetPizza();->ShowPizza();

return EXIT_SUCCESS;

}

 

 

 

Фабричный метод

Фабричный метод — порождающий шаблон проектирования, предоставляющий подклассам интерфейс для создания экземпляров некоторого класса. В момент создания наследники могут определить, какой класс инстанциировать. Иными словами, Фабрика делегирует создание объектов наследникам родительского класса. Это позволяет использовать в коде программы не специфические классы, а манипулировать абстрактными объектами на более высоком уровне. Также известен под названием виртуальный конструктор.

 






Дата добавления: 2015-09-15; просмотров: 360. Нарушение авторских прав; Мы поможем в написании вашей работы!




Кардиналистский и ординалистский подходы Кардиналистский (количественный подход) к анализу полезности основан на представлении о возможности измерения различных благ в условных единицах полезности...


Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...


Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...


Важнейшие способы обработки и анализа рядов динамики Не во всех случаях эмпирические данные рядов динамики позволяют определить тенденцию изменения явления во времени...

Субъективные признаки контрабанды огнестрельного оружия или его основных частей   Переходя к рассмотрению субъективной стороны контрабанды, остановимся на теоретическом понятии субъективной стороны состава преступления...

ЛЕЧЕБНО-ПРОФИЛАКТИЧЕСКОЙ ПОМОЩИ НАСЕЛЕНИЮ В УСЛОВИЯХ ОМС 001. Основными путями развития поликлинической помощи взрослому населению в новых экономических условиях являются все...

МЕТОДИКА ИЗУЧЕНИЯ МОРФЕМНОГО СОСТАВА СЛОВА В НАЧАЛЬНЫХ КЛАССАХ В практике речевого общения широко известен следующий факт: как взрослые...

Тема 2: Анатомо-топографическое строение полостей зубов верхней и нижней челюстей. Полость зуба — это сложная система разветвлений, имеющая разнообразную конфигурацию...

Виды и жанры театрализованных представлений   Проживание бронируется и оплачивается слушателями самостоятельно...

Что происходит при встрече с близнецовым пламенем   Если встреча с родственной душой может произойти достаточно спокойно – то встреча с близнецовым пламенем всегда подобна вспышке...

Studopedia.info - Студопедия - 2014-2025 год . (0.013 сек.) русская версия | украинская версия