从wiki开始,
工厂方法设计模式解决了以下问题:
>如何创建对象,以便子类可以重新定义要实例化的类?
>类如何将实例化延迟到子类?
例如,MazeGame提供了实例化功能来像MagicMazeGame这样子类.
哪里,
public abstract class MazeGame {
private final List rooms = new ArrayList<>();
public MazeGame() {
Room room1 = makeRoom();
Room room2 = makeRoom();
room1.connect(room2);
rooms.add(room1);
rooms.add(room2);
}
abstract protected Room makeRoom();
}
当然,这是一种创建模式,因此设计应围绕简化类的实例化.
我的问题是
工厂方法模式的优点是什么,引入提供模板方法(公共MazeGame(){..})的MagicGame类并将实例化延迟到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();
}
}