来自维基,
工厂方法设计模式解决了以下问题:
例如,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();
}读回答。
当然,这是一种创造性的模式,所以设计应该简化类的实例化。
我的问题是,
工厂方法模式的优点是什么,引入了提供模板方法(public 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();
}
}发布于 2017-12-22 08:48:37
使用工厂方法模式的优点是,您可以将创建类的业务逻辑与类的实际逻辑分离开来,因为如果您没有该工厂方法,那么您在系统中添加的每个类都需要在系统中包含一个工厂方法,而当您必须更改有关创建的某些内容时,您可能必须处理所有的类集(不利于打开-关闭原则)。
https://stackoverflow.com/questions/47938020
复制相似问题