一、简单工厂模式
实例化对象的时候不再使用new Object()的方式,根据传入参数的值来决定具体要实例化的对象。
二、简单工厂的应用
1.使用场景
被创建的实例通常具有共同的父类。
2.优点
简单工厂模式最大的优点在于实现对象的创建和对象的使用分离,将对象的创建交给专门的工厂类负责。
3.缺点
简单工厂最大的缺点在于工厂类不够灵活,增加新的具体产品需要修改工厂类的判断逻辑代码,而且产品较多时,工厂方法代码逻辑将会非常复杂。
三、简单工厂的实现
1.Operation
public abstract class Operation {
protected int numberA;
protected int numberB;
public abstract int getResult();
public int getNumberA() {
return numberA;
}
public void setNumberA(int numberA) {
this.numberA = numberA;
}
public int getNumberB() {
return numberB;
}
public void setNumberB(int numberB) {
this.numberB = numberB;
}
}
2.OperationAdd/OperationSub/OperationMul/OperationDiv
public class OperationAdd extends Operation {
@Override
public int getResult() {
return numberA + numberB;
}
}
public class OperationSub extends Operation {
@Override
public int getResult() {
return numberA - numberB;
}
}
public class OperationMul extends Operation {
@Override
public int getResult() {
return numberA * numberB;
}
}
public class OperationDiv extends Operation {
@Override
public int getResult() {
if(numberB == 0){
throw new RuntimeException("除数不能为0");
}
return numberA / numberB;
}
}
3.Factory
public class OperationFactory {
public static Operation create(int type){
switch (type) {
case 1:
return new OperationAdd();
case 2:
return new OperationSub();
case 3:
return new OperationMul();
case 4:
return new OperationDiv();
}
return null;
}
}
4Client
public class OperationClient {
public static void main(String[] args) {
Operation operationAdd = new OperationAdd();
operationAdd.setNumberA(9);
operationAdd.setNumberB(4);
System.out.println(operationAdd.getResult());
Operation operationSub = new OperationSub();
operationSub.setNumberA(9);
operationSub.setNumberB(4);
System.out.println(operationSub.getResult());
Operation operationMul = new OperationMul();
operationMul.setNumberA(9);
operationMul.setNumberB(4);
System.out.println(operationMul.getResult());
Operation operationDiv = new OperationDiv();
operationDiv.setNumberA(9);
operationDiv.setNumberB(4);
System.out.println(operationDiv.getResult());
Operation operationAddF = OperationFactory.create(1);
operationAddF.setNumberA(9);
operationAddF.setNumberB(4);
System.out.println(operationAddF.getResult());
Operation operationSubF = OperationFactory.create(2);
operationSubF.setNumberA(9);
operationSubF.setNumberB(4);
System.out.println(operationSubF.getResult());
Operation operationMulF = OperationFactory.create(3);
operationMulF.setNumberA(9);
operationMulF.setNumberB(4);
System.out.println(operationMulF.getResult());
Operation operationDivF = OperationFactory.create(4);
operationDivF.setNumberA(9);
operationDivF.setNumberB(4);
System.out.println(operationDivF.getResult());
}
}