Паттерн проектирования Factory.

max аватар
129
Находится в разделах:

Factory method pattern (aka Factory pattern) - порождающий паттерн. Порождающие паттерны абстрагируют процесс создания объектов, скрывая реализацию создания объектов и делая процесс создания объектов системно-независимым. Паттерн Abstract Factory выше на один уровень абстракции, чем паттерн Factory, а это означает, что он возвращает фабричные классы.

Factory method pattern (Factory pattern)

Фабрика для чего? Этот паттерн возвращает один из многих подклассов. Вы должны использовать этот паттерн, если у вас есть суперкласс и определенное количество подклассов, базирующихся на тех же данных, также вы должны возвратить объект одного из подклассов. Посмотрим на пример:

теперь посмотрим на вызывающий код, который использует фабрику:

Abstract factory pattern

Этот паттерн выше на один уровень абстракции, чем abstract method, что означает, что абстрактная фабрика возвращает определенные фабричные классы, которые будут позже возвращены в виде подкласса. Посмотрим на пример:

Теперь посмотрим на абстрактную фабрику, которая возвращает один из типов ShapeFactory:

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

Вопрос:

Какова цель использования factory pattern, abstract factory pattern?

Эти паттерны возвращают объект одного из многих подклассов, но вызывающий код не знает о действительной реализации класса. Вызывающий код вызывает метод  интерфейса, например Shape и использует полиморфизм для корректного вызова метода draw(). И так, как видите, фабричный паттерн уменьшает связи между вызывающим кодом и вызываемыми объектами.  Это очень мощная и широкоиспользуемая черта многих фреймворков. Вам необязательно создавать  новый объект Circle  или Square на каждом вызове, как показано в коде, который предназначен лишь для тестовых целей. 


Конец
Бертран Рассел склоняется к тому, что нет ничего более утомительного, и ничего более бесполезного, чем нерешительность.

Небольшая заметка

класс public class ShapeFactory

должен быть abstract

max аватар

есть

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

CAPTCHA
Чтобы оставить комментарий, введите пожалуйста код, изображенный на картинке
Image CAPTCHA
Введите символы, изображенные на картинке