一、概念
工厂方法模式是对简单工厂模式进一步的解耦。在工厂方法模式中是一个子类对应一个工厂类,而这些工厂类都实现于一个抽象接口
使用继承,把对象的创建委托给子类,子类实现工厂方法来创建对象
二、优缺点
比较简单工厂模式
- 工厂模式中,要增加产品类时也要相应地增加工厂类,客户端的代码也增加了不少。工厂方法把简单工厂的内部逻辑判断转移到了客户端代码来进行
- 工厂方法模式克服了简单工厂会违背开-闭原则的缺点,又保持了封装对象创建过程的优点
- 缺点:每增加一个产品类,就需要增加一个对应的工厂类,增加了额外的开发量
三、类图
四、示例代码
(1)定义操作接口
public interface Operation {
double getResult(int num1,int num2);
}
(2)定义操作实现类
// 加法类
public class Add implements Operation {
public double getResult(int num1, int num2) {
return num1 + num2;
}
}
// 减法类
public class Sub implements Operation {
public double getResult(int num1, int num2) {
return num1 - num2;
}
}
(3)定义工厂接口
public interface Factory {
Operation createOperate();
}
(4)定义工厂实现类
// 加法工厂
public class AddFactory implements Factory {
@Override
public Operation createOperate() {
return new Add();
}
}
//减法工厂
public class SubFactory implements Factory {
@Override
public Operation createOperate() {
return new Sub();
}
}
(5)测试调用
public static void main(String[] args) {
Factory addFactory = new AddFactory();
Factory subFactory = new SubFactory();
Operation add = addFactory.createOperate();
Operation sub = subFactory.createOperate();
System.out.println(add.getResult(1,2));
System.out.println(sub.getResult(1,2));
}
//=========结果=========
3.0
-1.0
五、使用场景
-
Collection中的iterator方法
-
java.net 网络包中的工厂方法模式
-
Logback 中的工厂方法模式