2、使用工厂方法模式设计能够实现包含加法(+)、减法(-)、乘法(*)、除法(/)四种运算的计算机程序,要求输入两个数和运算符,得到运算结果。要求使用相关的工具绘制UML类图并严格按照类图的设计编写程序实现。
抽象产品接口:
package gongchang;
public interface type {
double play(double num1,double num2);
}
具体产品:
package gongchang;
public class Chen implements type {
@Override
public double play(double num1, double num2) {
// TODO 自动生成的方法存根
System.out.printf("\n%.3fx%.3f=",num1,num2);
return num1*num2;
}
}
package gongchang;
public class Chu implements type {
@Override
public double play(double num1, double num2) {
// TODO 自动生成的方法存根
System.out.printf("\n%.3f/%.3f=",num1,num2);
if(num2==0) {
System.out.println("输入的数据分母不能为零");
return 0;
}
return num1/num2;
}
}
package gongchang;
public class Jia implements type {
@Override
public double play(double num1, double num2) {
// TODO 自动生成的方法存根
System.out.printf("\n%.3f+%.3f=",num1,num2);
return num1+num2;
}
}
package gongchang;
public class Jian implements type {
@Override
public double play(double num1, double num2) {
// TODO 自动生成的方法存根
System.out.printf("\n%.3f-%.3f=",num1,num2);
return num1-num2;
}
}
抽象工厂:
package gongchang;
public interface typefactory {
public type createfactory();
}
具体工厂:
package gongchang;
public class Chenfactory implements typefactory {
@Override
public type createfactory() { //具体工厂生产乘法对象
// TODO 自动生成的方法存根
type ty=new Chen();
return ty;
}
}
package gongchang;
public class Chufactory implements typefactory {
@Override
public type createfactory() { //具体工厂生产除法对象
// TODO 自动生成的方法存根
type ty=new Chu();
return ty;
}
}
package gongchang;
public class Jiafactory implements typefactory {
@Override
public type createfactory() {
// TODO 自动生成的方法存根
type ty=new Jia();
return ty;
}
}
package gongchang;
public class Jianfactory implements typefactory {
@Override
public type createfactory() { //具体工厂生产减法
// TODO 自动生成的方法存根
type ty=new Jian();
return ty;
}
}
测试
package gongchang;
import java.util.Scanner;
public class Client {
public static void main(String[] args) {
// TODO 自动生成的方法存根
typefactory factory1,factory2,factory3,factory4;//抽象工厂
type type1,type2,type3,type4; //抽闲产品
//创建一个实现加法的运算工厂
factory1=new Jiafactory(); //具体工厂生产加法
type1=factory1.createfactory(); //由具体工厂生产加法对象
System.out.println( type1.play(3, 5));
// //键盘输入字符串
// Scanner scanner=new Scanner(System.in);
// System.out.println("请输入第一个数值:");
// double num1=scanner.nextInt();
// System.out.println("请输入第二个数值:");
// double num2=scanner.nextInt();
//
//创建一个实现加法的运算工厂
// factory2=new Jianfactory(); //具体工厂实现减法
// type2=factory2.createfactory(); //生产具体产品减法
// System.out.println(type2.play(num1, num2));
// //创建一个实现乘法的运算工厂
factory3=new Chenfactory();//具体工厂生产乘
type3=factory3.createfactory();//乘法产品
System.out.println(type3.play(2.1,3));
创建一个实现除法的运算工厂
factory4=new Chufactory();//具体工厂生产除
type4=factory4.createfactory();//除法产品
System.out.println(type4.play(1,2));
}
}
工厂方法模式:符合开闭原则,在简单工厂模式的基础上进行改进。