Порождающие шаблоны проектирования



бет7/15
Дата01.10.2022
өлшемі254,47 Kb.
#41019
1   2   3   4   5   6   7   8   9   10   ...   15
Байланысты:
Шаблоны проектирования (порождающие) (1)

Достоинства и недостатки


Достоинства:

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

Недостатки:

Шаблон «Абстрактная фабрика»


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

  • Система должна оставаться независимой как от процесса создания новых объектов, так и от типов порождаемых объектов. Непосредственное использование выражения new в коде приложения;

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

Для решения задачи по созданию семейств взаимосвязанных объектов шаблон «Абстрактная фабрика» вводит понятие абстрактной фабрики. Абстрактная фабрика представляет собой некоторый полиморфный базовый класс, назначением которого является объявление интерфейсов фабричных методов, служащих для создания продуктов всех основных типов (один фабричный метод на каждый тип продукта). Производные от него классы, реализующие эти интерфейсы, предназначены для создания продуктов всех типов внутри семейства или группы.
Обобщённая диаграмма классов выглядит следующим образом:

Рисунок 6 Диаграмма классов для реализации абстрактной фабрики
Исходный код:
public class AbstractProductA
{
}

public class ProductA1 : AbstractProductA


{
}

public class ProductA2 : AbstractProductA


{
}

public class AbstractProductB


{
}

public class ProductB1 : AbstractProductB


{
}

public class ProductB2 : AbstractProductB


{
}
public abstract class AbstractFactory
{
public abstract AbstractProductA CreateProductA();
public abstract AbstractProductB CreateProductB();
}

public class ConcreteFactory1 : AbstractFactory


{
public override AbstractProductA CreateProductA()
{
return new ProductA1();
}
public override AbstractProductB CreateProductB()
{
return new ProductB1();
}
}

public class ConcreteFactory2 : AbstractFactory


{
public override AbstractProductA CreateProductA()
{
return new ProductA2();
}
public override AbstractProductB CreateProductB()
{
return new ProductB2();
}
}
В данном примере есть отдельные иерархии наследования для продуктов «A» и «B». Абстрактный класс фабрики реализует два метода по созданию объектов классов «A» и «B». Конкретные реализации фабрики переопределяют данные методы и создают каждый свой вид продуктов.


Достарыңызбен бөлісу:
1   2   3   4   5   6   7   8   9   10   ...   15




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет