BigEdu.ru

Шаблоны проектирования

Шаблоны проектирования

Abstract factory (Абстрактная фабрика)

Abstract factory (Абстрактная фабрика) — шаблон проектирования, позволяющий изменять поведение системы, варьируя создаваемые объекты, при этом сохраняя интерфейсы. Он позволяет создавать целые группы взаимосвязанных объектов, которые, будучи созданными одной фабрикой, реализуют общее поведение. Шаблон реализуется созданием абстрактного класса Factory, который представляет собой интерфейс для создания компонентов системы (например, для оконного интерфейса, он может создавать окна и кнопки). Затем пишутся наследующиеся от него классы, реализующие этот интерфейс.

Цель

Предоставляет интерфейс для создания семейств взаимосвязанных или взаимозависимых объектов, не специфицируя их конкретных классов

Плюсы

изолирует конкретные классы;

упрощает замену семейств продуктов;

гарантирует сочетаемость продуктов.

Минусы

сложно добавить поддержку нового вида продуктов.

Применимость

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


Пример C++ #include <iostream>// AbstractProductAclass ICar{public:virtualvoid info() = 0;};// ConcreteProductA1class Ford : public ICar{public:virtualvoid info(){std::cout << "Ford" << std::endl;}};//ConcreteProductA2class Toyota : public ICar{public:virtualvoid info(){std::cout << "Toyota" << std::endl;}};// AbstractProductBclass IEngine{public:virtualvoid getPower() = 0;};// ConcreteProductB1class FordEngine : public IEngine{public:virtualvoid getPower(){std::cout << "Ford Engine 4.4" << std::endl;}};//ConcreteProductB2class ToyotaEngine : public IEngine{public:virtualvoid getPower(){std::cout << "Toyota Engine 3.2" << std::endl;}};// AbstractFactoryclass CarFactory{public:ICar* getNewCar(){return createCar();}IEngine* getNewEngine(){return createEngine();}protected:virtual ICar*createCar()= 0;virtual IEngine*createEngine()= 0;};// ConcreteFactory1class FordFactory : public CarFactory{protected:// from CarFactoryvirtual ICar* createCar(){returnnew Ford();}virtual IEngine* createEngine(){returnnew FordEngine();}};// ConcreteFactory2class ToyotaFactory : public CarFactory{protected:// from CarFactoryvirtual ICar* createCar(){returnnew Toyota();}virtual IEngine* createEngine(){returnnew ToyotaEngine();}};int main(){CarFactory* curFactory= NULL;ICar*myCar= NULL;IEngine*myEngine= NULL;ToyotaFactorytoyotaFactory;FordFactoryfordFactory;curFactory = &toyotaFactory;myCar = curFactory->getNewCar();myCar->info();myEngine = curFactory->getNewEngine();myEngine->getPower();delete myCar;delete myEngine;curFactory = &fordFactory;myCar = curFactory->getNewCar();myCar->info();myEngine = curFactory->getNewEngine();myEngine->getPower();delete myCar;delete myEngine;return0;}

Builder (Строитель) — шаблон проектирования, порождающий объекты.

Цель

Отделяет конструирование сложного объекта от его представления, так что в результате одного и того же процесса конструирования могут получаться разные представления.

Плюсы

позволяет изменять внутреннее представление продукта;

изолирует код, реализующий конструирование и представление;

дает более тонкий контроль над процессом конструирования.

Применение

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

процесс конструирования должен обеспечивать различные представления конструируемого объекта.


Пример на C++

#include <iostream>#include <memory>#include <string>// Productclass Pizza{private:std::string dough;std::string sauce;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<< "Pizza with Dough as " << dough<< ", Sauce as " << sauce<< " and Topping as " << topping<< " !!! " << std::endl;}};// Abstract Builderclass PizzaBuilder{protected:std::auto_ptr<Pizza> pizza;public:PizzaBuilder(){}virtual ~PizzaBuilder(){}std::auto_ptr<Pizza> GetPizza(){return pizza; }void createNewPizzaProduct(){ pizza.reset(new Pizza); }virtualvoid buildDough()=0;virtualvoid buildSauce()=0;virtualvoid buildTopping()=0;};// ConcreteBuilderclass HawaiianPizzaBuilder : public PizzaBuilder{public:HawaiianPizzaBuilder() : PizzaBuilder(){}~HawaiianPizzaBuilder(){}void buildDough(){ pizza->SetDough("cross"); }void buildSauce(){ pizza->SetSauce("mild"); }void buildTopping(){ pizza->SetTopping("ham and pineapple"); }};// ConcreteBuilderclass SpicyPizzaBuilder : publi

Внимание, отключите Adblock

Вы посетили наш сайт со включенным блокировщиком рекламы!
Ссылка для скачивания станет доступной сразу после отключения Adblock!

Скачать
Контрольные работы по информатике и программированию Шаблоны проектирования Abstract factory (Абстрактная фабрика) Abstract factory (Абстрактная фабрика) — шаблон проектирования, позволяющий
Оценок: 1002 (Средняя 5 из 5)

Наверняка у вас есть товары или услуги, продажа которых приносит вам максимальную прибыль. Для быстрого старта в сети вам необходимо создание посадочной страницы (одностраничного сайта), на которой будет размещена информация о маржинальных товарах/услугах интернет магазина. За 8 лет опыта разработки конверсионных страниц мы выработали оптимальную структуру, которая позволит привлекать через landing page больше продаж. На такую структуру «одевается» ваш контент — фирменный стиль, тексты, фотографии, уникальные торговые предложения, после чего страница выходит в свет. Разработка лендинга и запуск в сети — до 7 рабочих дней. Стоит отметить, что в разработку самой посадочной страницы входит и написание копирайтером продающих текстов для вашего бизнеса, чтобы каждый посетитель страницы захотел совершить покупку именно у вас. Результат: качественно разработаная продающая посадочная страница, которая готова приносить вам новых клиентов.

© 2016 - 2022 BigEdu.ru