工厂方法模式的优势
Advantage of factory method pattern
来自 wiki,
工厂方法设计模式解决了如下问题:
如何创建一个对象,以便子classes可以重新定义实例化哪个class?
class 如何将实例化延迟到子classes?
例如MazeGame
像MagicMazeGame
.
一样为subclass提供实例化能力
其中,
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。
当然,这是一个创建模式,因此设计应该围绕简化 class.
的实例化
我的问题是,
工厂方法模式的优点是什么,引入MagicGame
class提供模板方法(public MazeGame(){..}
)和延迟实例化子 class MagicMazeGame
或 OrdinaryMazeGame
?
是否将实例化推迟到子class,以便仅抽象出 class 中的以下复杂性,例如 MagicMazeGame
、
Room room1 = MagicMazeGame();
Room room2 = MagicMazeGame();
room1.connect(room2);
rooms.add(room1);
rooms.add(room2);
并在每个classMagicMazeGame
或classOrdinaryMazeGame
中提供统一的创建逻辑,如下图,
public class MagicMazeGame extends MazeGame {
public MagicMazeGame() {
super();
}
@Override
protected Room makeRoom() {
return new MagicRoom();
}
}
使用工厂方法模式的优势在于,您可以将创建 class 的业务逻辑与 class 的实际逻辑分离,因为如果您没有该工厂方法,您在系统中添加的每个 class 都需要在内部有一个工厂方法,并且当您必须更改有关创建的某些内容时,您可能必须处理所有那组 classes (不利于开闭原则)
来自 wiki,
工厂方法设计模式解决了如下问题:
如何创建一个对象,以便子classes可以重新定义实例化哪个class?
class 如何将实例化延迟到子classes?
例如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。
当然,这是一个创建模式,因此设计应该围绕简化 class.
的实例化我的问题是,
工厂方法模式的优点是什么,引入MagicGame
class提供模板方法(public MazeGame(){..}
)和延迟实例化子 class MagicMazeGame
或 OrdinaryMazeGame
?
是否将实例化推迟到子class,以便仅抽象出 class 中的以下复杂性,例如 MagicMazeGame
、
Room room1 = MagicMazeGame();
Room room2 = MagicMazeGame();
room1.connect(room2);
rooms.add(room1);
rooms.add(room2);
并在每个classMagicMazeGame
或classOrdinaryMazeGame
中提供统一的创建逻辑,如下图,
public class MagicMazeGame extends MazeGame {
public MagicMazeGame() {
super();
}
@Override
protected Room makeRoom() {
return new MagicRoom();
}
}
使用工厂方法模式的优势在于,您可以将创建 class 的业务逻辑与 class 的实际逻辑分离,因为如果您没有该工厂方法,您在系统中添加的每个 class 都需要在内部有一个工厂方法,并且当您必须更改有关创建的某些内容时,您可能必须处理所有那组 classes (不利于开闭原则)