MaterStudiorum.ru - домашняя страничка студента.
Минимум рекламы - максимум информации.


Авиация и космонавтика
Административное право
Арбитражный процесс
Архитектура
Астрология
Астрономия
Банковское дело
Безопасность жизнедеятельности
Биографии
Биология
Биология и химия
Биржевое дело
Ботаника и сельское хоз-во
Бухгалтерский учет и аудит
Валютные отношения
Ветеринария
Военная кафедра
География
Геодезия
Геология
Геополитика
Государство и право
Гражданское право и процесс
Делопроизводство
Деньги и кредит
Естествознание
Журналистика
Зоология
Издательское дело и полиграфия
Инвестиции
Иностранный язык
Информатика
Информатика, программирование
Исторические личности
История
История техники
Кибернетика
Коммуникации и связь
Компьютерные науки
Косметология
Краткое содержание произведений
Криминалистика
Криминология
Криптология
Кулинария
Культура и искусство
Культурология
Литература и русский язык
Литература(зарубежная)
Логика
Логистика
Маркетинг
Математика
Медицина, здоровье
Медицинские науки
Международное публичное право
Международное частное право
Международные отношения
Менеджмент
Металлургия
Москвоведение
Музыка
Муниципальное право
Налоги, налогообложение
Наука и техника
Начертательная геометрия
Новейшая история, политология
Оккультизм и уфология
Остальные рефераты
Педагогика
Полиграфия
Политология
Право
Право, юриспруденция
Предпринимательство
Промышленность, производство
Психология
Психология, педагогика
Радиоэлектроника
Разное
Реклама
Религия и мифология
Риторика
Сексология
Социология
Статистика
Страхование
Строительные науки
Строительство
Схемотехника
Таможенная система
Теория государства и права
Теория организации
Теплотехника
Технология
Товароведение
Транспорт
Трудовое право
Туризм
Уголовное право и процесс
Управление
Управленческие науки
Физика
Физкультура и спорт
Философия
Финансовые науки
Финансы
Фотография
Химия
Хозяйственное право
Цифровые устройства
Экологическое право
Экология
Экономика
Экономико-математическое моделирование
Экономическая география
Экономическая теория
Эргономика
Этика
Юриспруденция
Языковедение
Языкознание, филология
    Начало -> Информатика, программирование -> Шаблоны проектирования

Название:Шаблоны проектирования
Просмотров:87
Раздел:Информатика, программирование
Ссылка:Скачать(141 KB)
Описание: Шаблоны проектирования Abstract factory (Абстрактная фабрика)   Abstract factory (Абстрактная фабрика) — шаблон проектирования, позволяющий изменять поведение системы, варьируя созд

Университетская электронная библиотека.
www.infoliolib.info

Часть полного текста документа:

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


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

 

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

Цель

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

Плюсы

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

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

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

Минусы

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

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

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


Пример C++

 

#include <iostream>

// AbstractProductA

class ICar

{

public:

virtual void info() = 0;

};

// ConcreteProductA1

class Ford : public ICar

{

public:

virtual void info()

{

std::cout << "Ford" << std::endl;

}

};

//ConcreteProductA2

class Toyota : public ICar

{

public:

virtual void info()

{

std::cout << "Toyota" << std::endl;

}

};

// AbstractProductB

class IEngine

{

public:

virtual void getPower() = 0;

};

// ConcreteProductB1

class FordEngine : public IEngine

{

public:

virtual void getPower()

{

std::cout << "Ford Engine 4.4" << std::endl;

}

};

//ConcreteProductB2

class ToyotaEngine : public IEngine

{

public:

virtual void getPower()

{

std::cout << "Toyota Engine 3.2" << std::endl;

}

};

// AbstractFactory

class CarFactory

{

public:

ICar* getNewCar()

{

return createCar();

}

IEngine* getNewEngine()

{

return createEngine();

}

protected:

virtual ICar*createCar()= 0;

virtual IEngine*createEngine()= 0;

};

// ConcreteFactory1

class FordFactory : public CarFactory

{

protected:

// from CarFactory

virtual ICar* createCar()

{

return new Ford();

}

virtual IEngine* createEngine()

{

return new FordEngine();

}

};

// ConcreteFactory2

class ToyotaFactory : public CarFactory

{

protected:

// from CarFactory

virtual ICar* createCar()

{

return new Toyota();

}

virtual IEngine* createEngine()

{

return new 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;

return 0;

}

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

Цель

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

Плюсы

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

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

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

Применение

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

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


 

Пример на C++

 

#include <iostream>

#include <memory>

#include <string>

// Product

class 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 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

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

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;

waiter.SetPizzaBuilder (&hawaiianPizzaBuilder);

waiter.ConstructPizza();

std::auto_ptr<Pizza> pizza = waiter.GetPizza();

pizza->ShowPizza();

SpicyPizzaBuilder spicyPizzaBuilder;

waiter.SetPizzaBuilder(&spicyPizzaBuilder);

waiter.ConstructPizza();

pizza = waiter.GetPizza();

pizza->ShowPizza();

return EXIT_SUCCESS;

}

Factory Method (Фабричный метод) — шаблон проектирования, реализующий идею "виртуального конструктора", то есть создания объектов без явного указания их типа. ............





Нет комментариев.



Оставить комментарий:

Ваше Имя:
Email:
Антибот:  
Ваш комментарий:  



Похожие работы:

Название:Язык SQL: общая характеристика, интерфейс с традиционными языками программирования
Просмотров:68
Описание: Федеральное агентство по образованию Государственное образовательное учреждение высшего профессионального образования Петрозаводский государственный университет Кольский филиал Кафедра информацион

Название:Достоинства и недостатки Product Placement в российской киноиндустрии
Просмотров:359
Описание: Оглавление Введение 1. Product Placement в киноиндустрии 1.1 История развития 1.2 Россия и Product Placement 2. Виды Product Placement 3. Практическое применение Product Placement Заключение Содержание Приложение Введение

Название:Устройство аппаратного шифрования данных с интерфейсом USB
Просмотров:74
Описание: ВВЕДЕНИЕ Информация - это одна из самых ценных вещей в современной жизни. Появление глобальных компьютерных сетей сделало простым получение доступа к информации. Легкость и скорость доступа к данным с помощь

Название:C++ Builder. Введение в структурное программирование
Просмотров:66
Описание: 1. Что такое C++Builder C++Builder — это новый продукт фирмы Borland, предназначенный для быстрой разработки Windows приложений (RAD — rapid application development) на языке С++. С помощью C++Builder вы можете создавать как консольные приложения,

Название:Создание графического интерфейса пользователя
Просмотров:93
Описание: Кафедра: ИТ СОЗДАНИЕ ГРАФИЧЕСКОГО ИНТЕРФЕЙСА ПОЛЬЗОВАТЕЛЯ В MATLAB Екатеринбург 2006 Принципы создания приложений с GUI Приложения MATLAB являются графич

 
     

Вечно с вами © MaterStudiorum.ru