Advantage of factory method pattern
从wiki,
工厂方法设计模式解决了以下问题:
如何创建对象以便子类可以重新定义要实例化的类?
类如何将实例化推迟到子类?
例如,
哪里,
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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(); } |
阅读答案。
当然,这是一个创造性的模式,所以设计应该围绕简化类的实例化。
我的问题是,
工厂方法模式的优势是什么,引入提供模板方法(
将实例化推迟到子类,只为了抽象像EDOCX1[1]这样的类中的以下复杂性,
1 2 3 4 5 | Room room1 = MagicMazeGame(); Room room2 = MagicMazeGame(); room1.connect(room2); rooms.add(room1); rooms.add(room2); |
号
并在每个类
1 2 3 4 5 6 7 8 9 | public class MagicMazeGame extends MazeGame { public MagicMazeGame() { super(); } @Override protected Room makeRoom() { return new MagicRoom(); } } |
使用工厂方法模式的好处在于,将创建类的业务逻辑与实际的类逻辑分离开来,因为如果没有工厂方法,则系统中添加的每个类都需要有一个工厂方法,当必须更改有关创建的某些内容时,您可能需要EAL与所有这些类集(不利于开闭原则)