1、使用简单工厂模式设计能够实现包含加法(+)、减法(-)、乘法(*)、除法(/)四种运算的计算机程序,要求输入两个数和运算符,得到运算结果。要求使用相关的工具绘制UML类图并严格按照类图的设计编写程
UML类图
源码:
抽象产品接口
package bao_1;
public interface Act {
public double yunsuan(double a,double b);
}
具体产品:
package bao_1;
public class Chen implements Act {
@Override
public double yunsuan(double a, double b) {
// TODO 自动生成的方法存根
return a*b;
}
}
package bao_1;
public class Chu implements Act {
double c = 0;
@Override
public double yunsuan(double a, double b) {
// TODO 自动生成的方法存根
if(b==0) {
System.out.println("分母不能为零");
return 0;
}
return a/b;
}
}
package bao_1;
public class Jia implements Act {
@Override
public double yunsuan(double a, double b) {
// TODO 自动生成的方法存根
return a+b;
}
}
package bao_1;
public class Jian implements Act {
@Override
public double yunsuan(double a, double b) {
// TODO 自动生成的方法存根
return a-b;
}
}
工厂生产产品:
package bao_1;
public class ActFactory {
public static Act getAct(String type) {
Act act = null;
if (type.equalsIgnoreCase("+")) {
act = new Jia();// 调用加法运算,创建对象
} else if (type.equalsIgnoreCase("-")) {
act = new Jian();// 创建减法对象
} else if (type.equalsIgnoreCase("*")) {
act = new Chen();// 创建乘法对象
} else if (type.equalsIgnoreCase("/")) {
act = new Chu();// 创建除法对象
} else {
System.out.println("您输入的运算符不合法,请输入正确的运算符");
}
return act;
}
}
测试
package bao_1;
import java.util.Scanner;
public class Client {
public static void main(String[] args) {
while (true) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入运算符:");
String type = scan.next();
System.out.println("请输入第一个数字");
if (scan.hasNext("\\d+(\\.\\d+)?")) { // 正则验证
String bir1 = scan.next("\\d+(\\.\\d+)?"); // 接收数据
double num1 = Double.parseDouble(bir1); // 类型转换
System.out.println("请输入第二个数字");
if (scan.hasNext("\\d+(\\.\\d+)?")) { // 正则验证
String bir2 = scan.next("\\d+(\\.\\d+)?"); // 接收数据
double num2 = Double.parseDouble(bir2); // 类型转换
Act action = ActFactory.getAct(type);// 创建运算符的实例对象
System.out.println(action.yunsuan(num1, num2));
} else {
System.out.println("输入的字符包含非数字,请输入正确的字符");
}
} else {
System.out.println("输入的字符包含非数字,请输入正确的字符");
}
System.out.println("结束请按-1");
double x = scan.nextInt();
if (x == -1)
break;
}
}
}
简单工厂:抽象产品接口,把具体产品的一些特征抽象出来,具体产品继承这个接口,实现具体的方法。工厂生产产品,不是很符合开闭原则。