Урок 1. Фабричный метод (Factory Method)
Паттерн "Фабрика" (Factory) — это один из порождающих паттернов проектирования, который используется для создания объектов. Он позволяет создавать экземпляры классов, не указывая конкретный класс, который будет создан. Это особенно полезно, когда у нас есть суперкласс с несколькими подклассами, и на основе определенного ввода необходимо вернуть один из подклассов. Основные концепции
Суперкласс и подклассы:
Суперкласс (или абстрактный класс) определяет общий интерфейс для всех подклассов.
Подклассы реализуют конкретные детали и поведение, специфичные для каждого типа объекта.
Фабрика:
Фабрика — это класс или метод, который инкапсулирует логику создания объектов.
В зависимости от входных данных (например, параметров, условий) фабрика возвращает экземпляр одного из подклассов.
Преимущества использования паттерна "Фабрика"
Упрощение кода: Код, который использует фабрику, не зависит от конкретных классов, что упрощает его поддержку и расширение.
Инкапсуляция логики создания: Логика создания объектов сосредоточена в одном месте, что облегчает внесение изменений.
Гибкость: Легко добавлять новые подклассы без изменения существующего кода, что соответствует принципу открытости/закрытости (Open/Closed Principle).
Пример использования
Рассмотрим пример, где у нас есть суперкласс Animal и несколько подклассов, таких как Dog и Cat. Мы создадим фабрику, которая будет возвращать экземпляры этих классов на основе входного параметра.
class Animal:
def speak(self):
pass
class Dog(Animal):
def speak(self):
return "Woof!"
class Cat(Animal):
def speak(self):
return "Meow!"
class AnimalFactory:
@staticmethod
def create_animal(animal_type):
if animal_type == "dog":
return Dog()
elif animal_type == "cat":
return Cat()
else:
raise ValueError("Unknown animal type")
# Использование фабрики
animal_type = input("Enter animal type (dog/cat): ")
animal = AnimalFactory.create_animal(animal_type)
print(animal.speak())
Заключение
Паттерн "Фабрика" является мощным инструментом для управления созданием объектов в программировании. Он позволяет разработчикам создавать гибкие и расширяемые системы, где добавление новых типов объектов не требует значительных изменений в существующем коде. Использование этого паттерна способствует улучшению структуры кода и облегчает его поддержку.
пример на java
https://gitlab.com/synergy9980417/razdel2/7_1