Изложение: Шаблоны проектирования

классу заранее неизвестно, объекты каких подклассов ему нужно создавать.

класс спроектирован так, чтобы объекты, которые он создаёт, специфицировались подклассами.

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

Плюсы

позволяет сделать код создания объектов более универсальным, не привязываясь к конкретным классам (ConcreteProduct), а оперируя лишь общим интерфейсом (Product);

позволяет установить связь между параллельными иерархиями классов.

Минусы

необходимость создавать наследника Creator для каждого нового типа продукта (ConcreteProduct).

· Product - продукт

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

· ConcreteProduct - конкретный продукт

o реализует интерфейс Product;

· Creator - создатель

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

o может вызывать фабричный метод для создания объекта типа Product;

· ConcreteCreator - конкретный создатель

o переопределяет фабричный метод таким образом, чтобы он создавал и возвращал объект класса ConcreteProduct.

Пример на C++


#include<iostream>#include<string>usingnamespace std;// "Product"class Product{public:virtual string getName() = 0;};// "ConcreteProductA"class ConcreteProductA : public Product{public:string getName(){return"ConcreteProductA";}};// "ConcreteProductB"class ConcreteProductB : public Product{public:string getName(){return"ConcreteProductB";}};class Creator{public:virtual Product* FactoryMethod() = 0;};// "ConcreteCreatorA"class ConcreteCreatorA : public Creator{public:Product* FactoryMethod(){returnnew ConcreteProductA();}};// "ConcreteCreatorB"class ConcreteCreatorB : public Creator{public:Product* FactoryMethod(){returnnew ConcreteProductB();}};int main(){constint size = 2;// An array of creatorsCreator* creators[size];creators[0] = new ConcreteCreatorA();creators[1] = new ConcreteCreatorB();// Iterate over creators and create productsfor(int i=0;i<size;i++){Product* product = creators[i]->FactoryMethod();cout<<product->getName()<<endl;delete product;}int a;cin>>a;for(int i=0;i<size;i++){delete creators[i];}return0;}
Prototype ( Прототип ) ? ????????????????????, ??????????????????.

Назначение

Задаёт виды создаваемых объектов с помощью экземпляра-прототипа и создаёт новые объекты путём копирования этого прототипа.

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

Используйте этот шаблон проектирования, когда система не должна зависеть от того, как в ней создаются, компонуются и представляются продукты:

инстанцируемые классы определяются во время выполнения, например с помощью динамической загрузки;

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

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

Adapter (Адаптер)

Адаптер, Adapter — структурный шаблон проектирования, предназначенный для организации использования функций объекта, недоступного для модификации, через специально созданный интерфейс.

К-во Просмотров: 416
Бесплатно скачать Изложение: Шаблоны проектирования