实现创建者和调用者的分离。
此处我们设计个程序,输入两个数和运算符号,输出结果。
//运算类
public class Operation {
double number01=0;
double number02=0;
public double getNumber01() {
return number01;
}
public double getNumber02() {
return number02;
}
public double getResult(){
double result=0;
return result;
}
}
//加法
public class OperationAdd extends Operation {
@Override
public double getResult() {
return number01+number02;
}
}
//减法
public class OperationSub extends Operation {
@Override
public double getResult() {
return number01-number02;
}
}
//乘法
public class OperationMul extends Operation {
@Override
public double getResult() {
return number01*number02;
}
}
//除法
public class OperationDiv extends Operation {
@Override
public double getResult() {
if(number02==0){
throw new ArithmeticException("除数不能为0");
}else {
return number01/number02;
}
}
}
//工厂
public class OperationFactory {
public static Operation createOperation(String operate){
Operation operation=null;
switch (operate){
case "+":
operation=new OperationAdd();
break;
case "-":
operation=new OperationSub();
break;
case "*":
operation=new OperationMul();
break;
case "/":
operation=new OperationDiv();
break;
}
return operation;
}
}
//测试
public class OperationTest {
public static void main(String[] args) {
Operation opera;
Scanner scanner=new Scanner(System.in);
System.out.println("请输入第一个数:");
double number01=scanner.nextDouble();
System.out.println("请输入第二个数:");
double number02=scanner.nextDouble();
System.out.println("请输入运算符(+ - * /):");
String operation=scanner.next();
opera=OperationFactory.createOperation(operation);
opera.number01=number01;
opera.number02=number02;
System.out.println("运算结果为:"+opera.getResult());
}
}
程序要求可维护、可复用、可扩展。
通过封装、继承、多态降低耦合度,提高灵活性。
我们让运算和显示分开,也就是业务逻辑和界面逻辑分开,降低它们之间的耦合度。
设计一个运算类,让算法子类去继承,如果需要修改某个算法,只需要修改对应类即可,不需要牵扯其运算类。
如果增加某个算法,只需要添加新的运算类,在工厂switch中添加新的分支。
工厂类负责创建实例,而调用者无需关心实例的创建,只关心调用。