设计模式(二)-简单工厂(Simple Factory)模式

本文介绍了一种基于Java实现的计算器设计方案,通过工厂模式创建不同的计算实例,支持基本的算术运算,包括加、减、乘、除,并提供了一个用户交互界面进行输入输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里写图片描述

下面看下小菜写的程序代码

import java.util.Scanner;
public class test001 {
    public static void main(String[] args) {
        System.out.printf("请输入A:");
        Scanner sc1=new Scanner(System.in);
        String str1=sc1.nextLine();   
        System.out.printf("请输入 B:");
        Scanner sc3=new Scanner(System.in);
        String str3=sc3.nextLine();
        int c=Integer.parseInt(str1)+Integer.parseInt(str3);
        System.out.printf(Integer.toString(c));
    }
}

咋一看好像没什么问题,应该实现的功能都实现了,就一个简单的加法。
然而他并没有被录取。
但是你可以先看下下面这种实现模式。
这个是类图
这里写图片描述
下面先看看实现的代码
Calculate.java(工厂)

package nsu.edu.cn;

public abstract class Calculate {
    private long[] num;  
    private String fh;  
    public Calculate(long[] numNew, String fhNew) {  
         num = numNew;  
         fh = fhNew;          
    }  
    public long[] getNum () {  
        return num;          
    }  
    public String getFh () {  
        return fh;          
    }  
    public abstract long Cal();
}

AddCal.java

package nsu.edu.cn;

public class AddCal extends Calculate {
    public AddCal(long[] numNew, String fhNew) {
        super(numNew, fhNew);
    }
    @Override
    public long Cal() {
    long num[] = super.getNum();  
              return num[0] + num[1];  
    }
}

SubCal.java

package nsu.edu.cn;

public class SubCal extends Calculate {
    public SubCal(long[] numNew, String fhNew) {
            super(numNew, fhNew);
    }
    @Override
    public long Cal() {
    long num[] = super.getNum();  
           return num[0] - num[1];  
    }
}

MulCal.java

package nsu.edu.cn;

public class MulCal extends Calculate {

    public MulCal(long[] numNew, String fhNew) {
        super(numNew, fhNew);
    }

    @Override
    public long Cal() {
         long num[] = super.getNum();  
            return num[0] * num[1];
    }

}

DivCal.java

package nsu.edu.cn;
public class DivCal extends Calculate {
    public DivCal(long[] numNew, String fhNew) {
        super(numNew, fhNew);
    }
    @Override
    public long Cal() {
    long num[] = super.getNum();  
           if (num[1] == 0) {  
            System.out.println("The Second Num Could not be 0");  
        }  
            return num[0] / num[1];
    }
}

IO.java(用来接收用户输入输出的工具类)

package nsu.edu.cn;
import java.util.Scanner;
public class IO {
    private long[] num;  
    private String fh;  
    public IO (){  
        num = new long[2];  
        fh = null;    
        Scanner scan = new Scanner(System.in);      
        System.out.println("Please input the first number:");  
        if (scan.hasNextInt())  
            num[0] = scan.nextInt();  
        System.out.println("Please input the second number:");  
        if (scan.hasNextInt())  
            num[1] = scan.nextInt();  
        System.out.println("Please input the Cal method:");  
        if (scan.hasNext())  
            fh = scan.next();      
    }  
    public void outputData () {  
        System.out.println("the first number is = " + num[0]);  
        System.out.println("the second number is = " + num[1]);  
        System.out.println("the Cal method is = " + fh);      
    }  
    public long[] getNum () {  
        return num;          
    }  
    public String getFh () {  
        return fh;          
    }  
}

CalFactory.java

package nsu.edu.cn;
public class CalFactory {
    private static long[] num;  
    private static String fh;  
    private static Calculate cal;  
    public static Calculate createCal(long[] numNew, String fhNew) throws Exception {  
         num = numNew;  
         fh = fhNew;      
         cal = null;  
        switch (fh) {  
            case "+":  cal = new AddCal(num, fh);break;  
            case "-":  cal = new SubCal(num, fh);break;  
            case "*":  cal = new MulCal(num, fh);break;  
            case "/":  if (num[1] == 0) {  
                throw new Exception("The Second Num Could not be 0");  
            }else {  
                cal = new DivCal(num, fh);  
                }    break;  
            default : System.out.println("Wrong Cal Method");    break;  
        }  
        return cal;      
    }  }

下面是测试类Cal.java

package nsu.edu.cn;
public class Cal {
    public static void main(String[] args) throws Exception {
          IO io = new IO();  
        Calculate calculate = CalFactory.createCal(io.getNum(), io.getFh());  
        System.out.println("The Answer is " + calculate.Cal());
    }
}

测试的时候你需要根据输入提示来输入两个运算数字,后面还有一个操作符,但是只能是 + - * /

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值