场景:制作一个简易可扩展计算器
通过工厂模式改进之前的简单工厂模式一样
public class Operation {
private double numberA;
private double numberB;
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 double getResult() throws Exception {
double result = 0;
return result;
}
}
这里只列举一个加法操作
public class OperationAdd extends Operation {
@Override
public double getResult() {
return getNumberA() + getNumberB();
}
}
以上操作对象和它的子类跟简单工厂模式
创建一个工厂接口,里面只有一个没有实现的创建操作方法
public interface IFactory {
Operation createOperation();
}
创建具体操作工厂,这个工厂实现上面的接口工厂,用来生成并返回具体操作对象实例
这里只列举一个加法工厂
public class AddFactory implements IFactory {
@Override
public Operation createOperation() {
return new OperationAdd();
}
}
客户端使用
public class Client {
public static void main(String[] args) throws Exception {
// 需要那个工厂就创建哪个工厂 然后通过这个工厂来创建返回具体的操作实例
// 体现多态性
IFactory addFactory = new AddFactory();
Operation addOperation = addFactory.createOperation();
addOperation.setNumberA(1);
addOperation.setNumberB(1);
System.out.println(addOperation.getResult());
}
}
如果要进行减法操作则,只需要增加一个减法操作类和一个减法工厂
优点:
相比之前的简单工厂模式,不需要再修改工厂来增加case,只需要增加一个操作工厂类来实现工厂接口
不用违背开发-封闭原则 ,即对扩展开发对修改关闭
缺点:
需要格外增加一个减法工厂