Преимущество фабричного метода
Из вики,
Шаблон проектирования Factory Method решает следующие проблемы:
Как можно создать объект, чтобы подклассы могли переопределить, какой класс создавать?
Как класс может отложить создание экземпляров для подклассов?
Например, 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 ответ
Преимущество использования шаблона метода фабрики состоит в том, что вы отделяете бизнес-логику создания класса от фактической логики класса, потому что, если у вас нет этого метода фабрики, каждый класс, который вы добавляете в свою систему, должен иметь фабричный метод внутри, и когда вам нужно что-то изменить в создании, вам, возможно, придется иметь дело со всем этим набором классов (плохо для принципа открытого-закрытого)