Рубрики
Без рубрики

Абстрактный Фабричный Узор

Предоставляет интерфейс для создания семейств связанных или зависимых объектов без указания их… С тегом pattern, creational, шаблоны проектирования, java.

Предоставляет интерфейс для создания семейств связанных или зависимых объектов без указания их конкретных классов.

  • AbstractFactory: объявляет интерфейс для операций, которые создают абстрактные продукты.
  • ConcreteFactory: реализует операции по созданию объектов конкретного продукта.
  • AbstractProduct: объявляет интерфейс для типа объекта product.
  • Продукт: определяет объект продукта, который будет создан соответствующей бетонной фабрикой. Реализует интерфейс AbstractProduct.
  • Клиент: использует интерфейсы, объявленные классами AbstractFactory и AbstractProduct.
public class Main {

    public static void main(String[] args) {
        // Abstract factory #1
        AbstractFactory factory1 = new ConcreteFactory1();
        Client client1 = new Client(factory1);
        client1.run();

        // Abstract factory #2
        AbstractFactory factory2 = new ConcreteFactory2();
        Client client2 = new Client(factory2);
        client2.run();
    }
}

public interface AbstractFactory {

    AbstractProductA createProductA();

    AbstractProductB createProductB();

}

public class ConcreteFactory1 implements AbstractFactory {

    @Override
    public AbstractProductA createProductA() {
        return new ProductA1();
    }

    @Override
    public AbstractProductB createProductB() {
        return new ProductB1();
    }

}

public class ConcreteFactory2 implements AbstractFactory {

    @Override
    public AbstractProductA createProductA() {
        return new ProductA2();
    }

    @Override
    public AbstractProductB createProductB() {
        return new ProductB2();
    }

}

public interface AbstractProductA {

}

public interface AbstractProductB {
    void interact(AbstractProductA a);
}

public class ProductA1 implements AbstractProductA {

}

public class ProductB1 implements AbstractProductB {

    @Override
    public void interact(AbstractProductA a) {
        System.out.println(this.getClass().getSimpleName() + " interacts with " + a.getClass().getSimpleName());
    }

}

public class ProductA2 implements AbstractProductA {

}

public class ProductB2 implements AbstractProductB {

    @Override
    public void interact(AbstractProductA a) {
        System.out.println(this.getClass().getSimpleName() + " interacts with " + a.getClass().getSimpleName());
    }

}

public class Client {

    private AbstractProductA abstractProductA;
    private AbstractProductB abstractProductB;

    public Client(AbstractFactory factory) {
        abstractProductB = factory.createProductB();
        abstractProductA = factory.createProductA();
    }

    public void run() {
        abstractProductB.interact(abstractProductA);
    }
}
ProductB1 interacts with ProductA1
ProductB2 interacts with ProductA2

eidherjulian61/дизайн-шаблоны

Основные шаблоны Проектирования

ид – 27 сентября ・ 1 минута чтения

Оригинал: “https://dev.to/eidher/abstract-factory-3opg”