Паттерн фабрика Java
Паттерн Фабрика (Factory) является одним из порождающих паттернов проектирования. Он предоставляет абстрактный интерфейс для создания объектов, скрывая специфику создания конкретных классов от клиентского кода.
В Java паттерн Фабрика может быть реализован с использованием статического метода внутри фабричного класса. Давайте рассмотрим пример:
java
// Абстрактный класс продукта, который будет производить фабрика
abstract class Product {
public abstract void operation();
}
// Конкретная реализация продукта
class ConcreteProductA extends Product {
@Override
public void operation() {
System.out.println("Operation in ConcreteProductA");
}
}
// Конкретная реализация продукта
class ConcreteProductB extends Product {
@Override
public void operation() {
System.out.println("Operation in ConcreteProductB");
}
}
// Фабричный класс
class Factory {
public static Product createProduct(String type) {
if (type.equals("A")) {
return new ConcreteProductA();
} else if (type.equals("B")) {
return new ConcreteProductB();
}
return null;
}
}
// Пример использования
public class Main {
public static void main(String[] args) {
Product productA = Factory.createProduct("A");
productA.operation(); // Вывод: Operation in ConcreteProductA
Product productB = Factory.createProduct("B");
productB.operation(); // Вывод: Operation in ConcreteProductB
}
}
В данном примере фабричный класс Factory имеет статический метод createProduct, который принимает в качестве аргумента тип продукта, который нужно создать. Далее в методе происходит проверка и возвращается соответствующий экземпляр продукта.
Таким образом, в клиентском коде нам не нужно знать, как именно создается объект, мы просто вызываем нужный метод фабрики и получаем нужный нам продукт. Это позволяет нам избежать прямой зависимости от конкретных классов продуктов и позволяет гибко изменять и добавлять новые продукты без изменения клиентского кода.
Паттерн Фабрика используется, когда необходимо инкапсулировать процесс создания объектов в одно место и обеспечить простой способ расширения для добавления новых типов продуктов. Он позволяет упростить создание объектов и сделать код более гибким и поддерживаемым.