目录
1.前言:
上一篇文章写道创建型模式-简单工厂模式demo理解,
简单工厂模式有一个缺点就是,创建对象的if、else if代码片段带到了工厂类里面去了,后面要是新增一个指标进行分析的话,还要在工厂类里面,重写新增一个 else if 代码片段,违背了开闭原则。
怎么样对这个缺点进行优化呢,就可以使用工厂方法模式进行优化,简单点就是,工厂类下面进行新增子类,不同指标类实现不同的创建对象和实现计算的api.
2.工厂方法demo优化
主要是工厂类接口层进行优化,
//抽象接口:情景分析接口层
interface Analysis {
public void calculate();
}
//实现层:指标a分析
class AnalysisIndexA implements Analysis {
public AnalysisIndexA() {
System.out.println("指标a分析!");
}
public void calculate() {
System.out.println("指标a计算完成!");
}
}
//实现层:指标b分析
class AnalysisIndexB implements Analysis {
public AnalysisIndexB() {
System.out.println("指标b分析!");
}
public void calculate() {
System.out.println("指标b计算完成!");
}
}
//工厂类
interface analysisFactory {
//工厂类只负责抽象一个接口
public Analysis factoryMethod();
}
//指标a工厂类
class AnalysisIndexAFactory implements analysisFactory {
public Analysis factoryMethod() {
return new AnalysisIndexA();
}
}
//指标a工厂类
class AnalysisIndexBFactory implements analysisFactory {
public Analysis factoryMethod() {
return new AnalysisIndexB();
}
}
class Client {
public static void main(String args[]) {
//
analysisFactory factory;
factory = new AnalysisIndexAFactory();
Analysis analysis;
//通过静态工厂方法引用不同指标对象
analysis = factory.factoryMethod();
//开始进行指标计算
analysis.calculate();
}
}
3.优缺点
1. 主要优点
工厂方法模式的主要优点如下:
(1) 向调用方隐藏创建细节
(2) 加入新指标计算时,无须修改抽象工厂和抽象产品提供的接口,无须修改客户端,也无须修改其他的具体工厂和具体产品,而只要添加一个具体指标工厂和具体指标类就可以了,这样,系统的可扩展性也就变得非常好,完全符合“开闭原则”。
2. 主要缺点
工厂方法模式的主要缺点如下:
(1) 新增指标数量增加,类的个数也随之增加,增加资源开销