【发布时间】:2017-12-22 08:16:03
【问题描述】:
来自wiki,
工厂方法设计模式解决了以下问题:
如何创建对象以便子类可以重新定义要实例化的类?
类如何将实例化推迟到子类?
例如,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();
}
阅读answer。
当然,这是一种创建模式,因此设计应该围绕简化类的实例化。
我的问题是,
工厂方法模式的优点是什么,引入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();
}
}
【问题讨论】:
标签: java oop design-patterns factory-method open-closed-principle