Из вики,
Шаблон проектирования 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();
}
}