Патерн factory method

Factory Method - це патерн створення об'єктів (creational pattern). Даний шаблон проектування надає інтерфейс для створення екземплярів деякого класу. У момент створення спадкоємці можуть визначити, який клас інстанцііровать.

Іншими словами, Фабрика делегує створення об'єктів спадкоємцям батьківського класу. Це дозволяє використовувати в коді програми не специфічні класи, а маніпулювати абстрактними об'єктами на більш високому рівні.

Патерн проектування Factory зустрічається дуже часто. Розглянемо невеликий приклад на Java.

Вступ: Вимоги до різного роду програмним продуктам постійно зростають. Звіти з виконання операцій додатки повинні формуватися в різному вигляді: XML, HTML, текст і т.д. Це як раз той випадок, коли зручно використовувати патерн Factory.

Рішення: Клас AbstractWriter представлятиме абстракцію для запису в певний контекст (будь то XML-документ або текстовий файл).

У цього класу може бути будь-яку кількість спадкоємців. Розглянемо підкласи ConcreteFileWriter і ConcreteXmlWriter для запису в текстовий файл і DOM документ відповідно:

Для створення потрібного нам об'єкта можна написати наступну Фабрику:

У тексті програми при створенні звіту потрібно передати у функцію getWriter об'єкт File або DOM документ. В результаті виконання методу ми отримаємо потрібний об'єкт необхідного рівня абстракції.

Використовуйте патерн Factory в наступних випадках:

  • клас не має інформації про те, який тип об'єкта він повинен створити;
  • клас передає відповідальність за створення об'єктів спадкоємцям;
  • необхідно створити об'єкт в залежності від вхідних даних.

В одній з наступних статей з проектування ми розглянемо патерн Abstract Factory.

Наскільки я зрозумів в прикладі (за приклади в циклі про патернах окреме спасибі) проілюстрована параметрірозованная фабрика, т. К. В фабричний метод передається параметр, на основі якого і створюється конкретний підклас AbstractWriter. Тим часом, класична фабрика, наскільки я зрозумів, поводиться трохи інакше: "клас спроектований так, щоб об'єкти, які він створює, специфіковані підкласами" (Е. Гамма 'Паттерни проектування'). Тобто має бути кілька спадкоємців FactoryMethod для кожного спадкоємця AbstractWriter, а вибір залишається за клієнтом, яку з реалізацію FactoryMethod вибрати. Я правильно зрозумів?

Насправді в прикладі показаний зовсім не Factory Method, а так звана Simple Factory (це навіть не шаблон проектування, а просто широко використовувана техніка). Правильно написав danik, що у класу FactoryMethod повинні бути спадкоємці, які власне і скасовують фабричний метод. На перший погляд може здатися, що немає ніякої відмінності, але відміну величезна. Прочитайте "Head First Design Patterns" або "Design Patterns For Dummies" і вам стане все зрозуміло.

Ти не правий. Це все таки фабричний метод. Новомосковський у Еріха Гамми: "параметризрвані фабричні методи. Це ще один варіант патерну, який дозволяє фабричному методу створювати різні види продуктів. Фабричного методу передається параметр, який ідентифікує вид створюваного об'єкта.

Всі об'єкти, що виходять за допомогою фабричного методу, поділяють загальний інтерфейс Product. У прикладі з документами клас Application може підтримувати різні види документів. Ви передаєте методу CreateDocument зайвий параметр, який і визначає, документ якого виду потрібно створити "

Так що перед тим як висловлювати свою думку непогано б вивчити мат частина

Чогось не зрозумів, а чим це відрізняється він паттерна стратегія?

Можна я теж по мудрувати. antonin yorov різниця між фабрикою і стратегією в тому що стратегія дозволяє динамічно визначати потрібний алгоритм (тобто можна в Рантайм підключати потрібний субклассов інтерфейсу) а фабрика при цьому в алгоритмі має метод який повертає об'єкт.