Преимущество фабричного метода

Из вики,

Шаблон проектирования Factory Method решает следующие проблемы:

  1. Как можно создать объект, чтобы подклассы могли переопределить, какой класс создавать?

  2. Как класс может отложить создание экземпляров для подклассов?

Например, MazeGame обеспечивает возможность создания экземпляров для подкласса как MagicMazeGame,

где,

public abstract class MazeGame {
    private final List<Room> rooms = new ArrayList<>();

    public MazeGame() {
        Room room1 = makeRoom();
        Room room2 = makeRoom();
        room1.connect(room2);
        rooms.add(room1);
        rooms.add(room2);
    }

    abstract protected Room makeRoom();
}

Прочитайте ответ.

Конечно, это шаблон творчества, поэтому дизайн должен быть таким, чтобы упростить создание экземпляров класса.


Мой вопрос

В чем преимущество фабричного метода выкройки, внедряющего MagicGame класс, который предоставляет метод шаблона (public MazeGame(){..}) и отложить создание экземпляров для подкласса MagicMazeGame или же OrdinaryMazeGame?

Откладывает создание экземпляров для подкласса только для абстрагирования приведенных ниже тонкостей в классе MagicMazeGame,

        Room room1 = MagicMazeGame();
        Room room2 = MagicMazeGame();
        room1.connect(room2);
        rooms.add(room1);
        rooms.add(room2);

и обеспечить единую логику создания в каждом классе MagicMazeGame или класс OrdinaryMazeGame, как показано ниже,

public class MagicMazeGame extends MazeGame {
    public MagicMazeGame() {
        super();
    } 
    @Override
    protected Room makeRoom() {
        return new MagicRoom(); 
    }
}

1 ответ

Решение

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

Другие вопросы по тегам