一、模式定义
定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。工厂方法模式是简单工厂模式的衍生,解决了许多简单工厂模式的问题。
简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。
二、结构图
工厂方法模式结构图:
简单工厂模式结构图:
三、代码实现(计算器)
<span style="font-size:14px;">/**
* 抽象运算类
*/
public abstract class Operation {
private double numberA = 0;
private double numberB = 0;
public double getNumberA() {
return numberA;
}
public void setNumberA(double numberA) {
this.numberA = numberA;
}
public double getNumberB() {
return numberB;
}
public void setNumberB(double numberB) {
this.numberB = numberB;
}
//子类实现该方法
public abstract double getResult();
}</span>
/*
* 加法类
*/
public class OperationAdd extends Operation{
@Override
public double getResult() {
return getNumberA() + getNumberB();
}
}
/*
* 减法类
*/
class OperationSub extends Operation{
@Override
public double getResult() {
return getNumberA() + getNumberB();
}
}
/*
* 乘法类
*/
class OperationMul extends Operation{
@Override
public double getResult() {
return getNumberA() + getNumberB();
}
}
/*
* 除法类
*/
class OperationDiv extends Operation{
@Override
public double getResult() {
return getNumberA() + getNumberB();
}
}
/**
* 抽象工厂类
*/
public interface IFactory {
public Operation createOperation();
}
/*
* 加法工厂
*/
public class AddFactory implements IFactory{
@Override
public Operation createOperation() {
return new OperationAdd();
}
}
/*
* 减法工厂
*/
class SunFactory implements IFactory{
@Override
public Operation createOperation() {
return new OperationSub();
}
}
/*
* 乘法工厂
*/
class MulFactory implements IFactory{
@Override
public Operation createOperation() {
return new OperationMul();
}
}
/*
* 除法工厂
*/
class DivFactory implements IFactory{
@Override
public Operation createOperation() {
return new OperationDiv();
}
}
public class FactoryMethodMain {
public static void main(String[] args) {
//进行加法运算
IFactory factory = new AddFactory();
Operation oper = factory.createOperation();
oper.setNumberA(10);
oper.setNumberB(20);
double result = oper.getResult();
System.out.println(result);
}
}