工厂方法模式的优点

时间:2017-12-22 08:16:04

标签: java oop design-patterns factory-method open-closed-principle

来自wiki

Factory Method设计模式解决了以下问题:

  1. 如何创建对象以便子类可以重新定义要实例化的类?

  2. 如何将类推迟实例化为子类?

  3. 例如,MazeGameMagicMazeGame之类的子类提供实例化功能。

    enter image description here

    其中,

    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

1 个答案:

答案 0 :(得分:4)

使用工厂方法模式的优点是,您可以将类的创建的业务逻辑与类的实际逻辑分离,因为如果您没有该工厂方法,那么您在系统上添加的每个类需要在里面有一个工厂方法,当你必须改变一些关于创建的东西时,你可能不得不处理所有这些类(对于开放封闭原则不利)