介绍
使用一个单独的类去实现创建实例的过程。实现要操作类和实际操作类的解耦,增加程序可扩展性。
使用
public class SimpleFactory {
public static void main(String[] args) {
Operation operation = OperationFactory.createOperation("+");
operation.setNumberA(1);
operation.setNumberB(4);
System.out.println(operation.getResult());
}
}
/**
* 抽象操作类
*/
abstract 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 abstract double getResult();
}
/**
* 加法操作
*/
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() {
if (getNumberB() == 0){
try {
throw new Exception("除数不能为0");
} catch (Exception e) {
e.printStackTrace();
}
}
return getNumberA() / getNumberB();
}
}
/**
* 操作工厂类
*/
class OperationFactory{
public static Operation createOperation(String operation){
if (operation.equals("+")){
return new OperationAdd();
} else if (operation.equals("-")){
return new OperationSub();
} else if (operation.equals("*")){
return new OperationMul();
} else {
return new OperationDiv();
}
}
}