工厂方法模式
介绍
工厂方法的使用频率很高,经常可以在一些项目中看见
工厂方法(Factory Method) - 定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类
工厂方法针对每一种产品提供一个工厂类,通过不同的工厂实例来创建不同的产品实例,相比于简单工厂来说,不再提供一个统一的工厂创建所有的对象
优点
- 工厂方法模式很好的减轻了工厂类的负担,把一种类交由一个工厂创建
- 同时增加产品类并不需要修改工厂类,只需要添加创建该产品的工厂即可,使得工厂类符合开放-封闭原则
缺点
- 对于某些可以形成产品族(一组产品)的情况处理比较复杂
工厂方法类图
工厂方法模式角色分配
- 抽象工厂(Factory):创建对象的工厂类的接口或父类
- 具体工厂(ConcreteFactory):实现抽象工厂接口的具体工厂类
- 抽象产品(Product):工厂类所创建对象的超类型,也就是具体产品对象的共同父类或接口
- 具体产品(ConcreteProduct):具体产品由专门的具体工厂创建
img
代码示例
对上面简单工厂模式的例子修改,增加一个工厂接口和实现接口的具体工厂类
工厂接口
public interface IChartFactory {
IChart getChart();
}
工厂实现-柱状图工厂类
public class BarChartFactory implements IChartFactory{
@Override
public IChart getChart() {
return new BarChart();
}
}