来自wiki,
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();
}
阅读answer。
当然,这是一种创造性的模式,因此设计应该是简化类的实例化。
我的问题是,
工厂方法模式的优点是什么,引入提供模板方法的MagicGame
类(public MazeGame(){..}
)并将实例化推迟到子类MagicMazeGame
或{ {1}}?
将实例化推迟到子类,仅用于抽象类OrdinaryMazeGame
,
MagicMazeGame
并在每个班级 Room room1 = MagicMazeGame();
Room room2 = MagicMazeGame();
room1.connect(room2);
rooms.add(room1);
rooms.add(room2);
或班级MagicMazeGame
中提供统一的创建逻辑,如下所示,
OrdinaryMazeGame
答案 0 :(得分:4)
使用工厂方法模式的优点是,您可以将类的创建的业务逻辑与类的实际逻辑分离,因为如果您没有该工厂方法,那么您在系统上添加的每个类需要在里面有一个工厂方法,当你必须改变一些关于创建的东西时,你可能不得不处理所有这些类(对于开放封闭原则不利)