JAVA设计模式:工厂模式在开发中的运用,以计算机为例

本文通过具体案例,详细解析了工厂模式在计算器程序中的应用,包括简单工厂模式和工厂方法模式,展示了如何通过抽象类和接口实现代码的解耦合,使程序更易于维护和扩展。

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

工厂模式在开发中的运用

一、面试题

计算器

二、利用简单工厂模式解决,避免面向过程
2.1 Operation
public abstract class Operation {
    private double num1;
    private double num2;

    public double getNum1() {
        return num1;
    }

    public void setNum1(double num1) {
        this.num1 = num1;
    }

    public double getNum2() {
        return num2;
    }

    public void setNum2(double num2) {
        this.num2 = num2;
    }

    public abstract double getResult();
}
2.2 AddOperation
public class AddOperation extends Operation {
    @Override
    public double getResult() {
        double result = this.getNum1()+this.getNum2();
        return result;
    }
}
2.3 SubOperation
public class SubtractionOperation extends Operation {
    @Override
    public double getResult() {
        double result = this.getNum1()-this.getNum2();
        return result;
    }
}
2.4 OperationFactory
public class OperationFactory {
    public static Operation getOperation(String oper){
        if("+".equals(oper))
            return new AddOperation();
        if("-".equals(oper))
            return new SubtractionOperation();
        return null;
    }
}
2.5 MainClass
public class MainClass {
    public static void main(String[] args){
        //1、接受控制台输入
        System.out.println("--- 计算器程序 ---");
        Scanner scanner = new Scanner(System.in);
        System.out.println("输入第一个操作数");
        String strNum1 = scanner.nextLine();
        System.out.println("输入运算符");
        String oper = scanner.nextLine();
        System.out.println("输入第二个操作数");
        String strNum2 = scanner.nextLine();

        double result = 0;
        double num1 = Double.parseDouble(strNum1);
        double num2 = Double.parseDouble(strNum2);

        //2、进行运算
        Operation operation = OperationFactory.getOperation(oper);
        operation.setNum1(num1);
        operation.setNum2(num2);
        result = operation.getResult();

        //3、返回结果
        System.out.println(strNum1+" "+oper+" "+strNum2+" = "+result);
    }
}
三、工厂方法模式进行优化
3.1 Operation
public abstract class Operation {
    private double num1;
    private double num2;

    public double getNum1() {
        return num1;
    }

    public void setNum1(double num1) {
        this.num1 = num1;
    }

    public double getNum2() {
        return num2;
    }

    public void setNum2(double num2) {
        this.num2 = num2;
    }

    public abstract double getResult();
}
3.2 AddOperation
public class AddOperation extends Operation {
    @Override
    public double getResult() {
        double result = this.getNum1()+this.getNum2();
        return result;
    }
}
3.3 OperationFactory
public interface  OperationFactory {
    public Operation getOperation();
}
3.4 AddOperationFactory
public class AddOperationFactory implements OperationFactory {
    @Override
    public Operation getOperation() {
        return new AddOperation();
    }
}
3.5 MainClass
public class MainClass {
    public static void main(String[] args){
        //1、接受控制台输入
        System.out.println("--- 计算器程序 ---");
        Scanner scanner = new Scanner(System.in);
        System.out.println("输入第一个操作数");
        String strNum1 = scanner.nextLine();
        System.out.println("输入运算符");
        String oper = scanner.nextLine();
        System.out.println("输入第二个操作数");
        String strNum2 = scanner.nextLine();

        double result = 0;
        double num1 = Double.parseDouble(strNum1);
        double num2 = Double.parseDouble(strNum2);

        //2、进行运算
        if("+".equals(oper)){
            OperationFactory operationFactory = new AddOperationFactory();
            Operation operation = operationFactory.getOperation();
            operation.setNum1(num1);
            operation.setNum2(num2);
            result = operation.getResult();
        }
        if("-".equals(oper)){
            OperationFactory operationFactory = new SubtractionOperationFactory();
            Operation operation = operationFactory.getOperation();
            operation.setNum1(num1);
            operation.setNum2(num2);
            result = operation.getResult();
        }
        //3、返回结果
        System.out.println(strNum1+" "+oper+" "+strNum2+" = "+result);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值