工厂方法模式属于类创建型模式,工厂父类负责定义创建产品对象的公共接口,而子类工厂负责生成具体的产品对象,目的是将产品的实例化操作延迟到工厂子类中完成,通过工厂子类来确定究竟应该实例化哪一个具体产品类
工厂方法模式包含如下角色:
1.Product(抽象产品类):是定义产品的接口,是工厂方法模式所创建对象的超类型,即产品对象的共同父类或接口
2.ConcreteProduct(具体产品类):实现了抽象产品接口,某种类型的具体产品由专门的具体工厂构建,它们之间存在一一对应关系
3.Factory(抽象工厂类):抽象工厂中声明了工厂方法,用于返回一个产品,他是工厂方法的核心,任何在模式中创建对象的工厂类都必须实现该接口
4.ConcreteFactory(具体工厂类):是抽象工厂类的子类,实现了抽象工厂中定义的方法,可由客户端调用返回一个具体产品类的实例
工厂方法模式的优点
1.隐藏细节,关注工厂名
2.使工厂可以自主确定创建何种产品对象,如何创建的具体细节完全封装在具体工厂内部
3.完全符合开闭原则
工厂方法模式的缺点
1.一个产品对应一个子工厂,加大了额外的开发量
2.增加了系统的实现难度