Порождающие паттерны

Слайд 2

Фабричный метод (Factory Method) это паттерн, который определяет интерфейс для создания

Фабричный метод (Factory Method)

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

некоторого класса, но непосредственное решение о том, объект какого класса создавать происходит в подклассах.
Когда надо применять паттерн
Когда заранее неизвестно, объекты каких типов необходимо создавать
Когда система должна быть независимой от процесса создания новых объектов и расширяемой: в нее можно легко вводить новые классы, объекты которых система должна создавать.
Когда создание новых объектов необходимо делегировать из базового класса классам наследникам
Слайд 3

UML – диаграмма паттерна «Factory Method»

UML – диаграмма паттерна «Factory Method»

Слайд 4

Формальное определение паттерна на языке C# abstract class Product {} class

Формальное определение паттерна на языке C#

abstract class Product {}
class ConcreteProductA :

Product {}
class ConcreteProductB : Product {}
abstract class Creator
{
    public abstract Product FactoryMethod();
}
class ConcreteCreatorA : Creator
{
    public override Product FactoryMethod()
{ return new ConcreteProductA(); }
}
class ConcreteCreatorB : Creator
{
    public override Product FactoryMethod()
{ return new ConcreteProductB(); }
}
Слайд 5

Пример:

Пример:

Слайд 6

Абстрактная фабрика (Abstract Factory) предоставляет интерфейс для создания семейств взаимосвязанных объектов

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

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

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

UML – диаграмма паттерна «Abstract Factory»

UML – диаграмма паттерна «Abstract Factory»

Слайд 8

Формальное определение паттерна на языке C# abstract class AbstractFactory { public

Формальное определение паттерна на языке C#

abstract class AbstractFactory
{
    public abstract AbstractProductA CreateProductA();
    public

abstract AbstractProductB CreateProductB();
}
class ConcreteFactory1: AbstractFactory
{
    public override AbstractProductA CreateProductA()   {  return new ProductA1(); }
     public override AbstractProductB CreateProductB()   {  return new ProductB1(); }
}
class ConcreteFactory2: AbstractFactory
{
    public override AbstractProductA CreateProductA()  {  return new ProductA2();  }
    public override AbstractProductB CreateProductB()   {   return new ProductB2(); }
}
 abstract class AbstractProductA {}
 abstract class AbstractProductB   {}
 class ProductA1: AbstractProductA {}
 class ProductB1: AbstractProductB  {}
 class ProductA2: AbstractProductA  {}
 class ProductB2: AbstractProductB  {}     
 class Client
{
    private AbstractProductA abstractProductA;
    private AbstractProductB abstractProductB;
     public Client(AbstractFactory factory)
    {        abstractProductB = factory.CreateProductB();    abstractProductA = factory.CreateProductA();    }
    public void Run()    { }
}
Слайд 9

Пример:

Пример: