4.工厂模式在开发中的运用

写一个简单的计算器。

先看普通的简单计算器
MainClass.java

import java.util.Scanner;

public class MainClass {
    public static void main(String[] args) {
        // 1.接受控制台输入
        System.out.println("---计算器程序---");

        System.out.println("输入第一个操作数");
        Scanner scanner = new Scanner(System.in);
        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)) {
            result = num1 + num2;
        } else if ("-".equals(oper)) {
            result = num1 - num2;
        } else if ("*".equals(oper)) {
            result = num1 * num2;
        } else if ("/".equals(oper)) {
            result = num1 / num2;
        }

        // 3.返回结果
        System.out.println(strNum1 + oper + strNum2 + "=" + result);
    }
}

缺点:完全面向过程设计,缺少代码重用

看运用了工厂模式的计算器
Operation.java
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(); 
}

AddOperation.java
public class AddOperation extends Operation { 
	 
    @Override 
    public double getResult() { 
        double result = this.getNum1() + this.getNum2(); 
        return result; 
    } 
}

SubstractionOperation.java
public class SubtractionOperation extends Operation { 
	 
    @Override 
    public double getResult() { 
        double result = this.getNum1() - this.getNum2(); 
        return result; 
    } 
 
}

OperationFactory.java
public interface OperationFactory { 
    public Operation getOperation(); 
}

AddOperationFactory.java
public class AddOperationFactory implements OperationFactory{ 
	 
    public Operation getOperation() { 
        return new AddOperation(); 
    } 
 
}
SubstractionOperationFactory.java
public class SubstractionOperationFactory implements OperationFactory{ 
	 
    public Operation getOperation() { 
        return new SubtractionOperation(); 
    } 
 
}

MainClass.java
import java.util.Scanner; 
public class MainClass { 
    public static void main(String[] args) { 
        //1.接受控制台输入 
        System.out.println("---计算器程序---"); 
        
        System.out.println("输入第一个操作数"); 
        Scanner scanner = new Scanner(System.in); 
        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 factory = new AddOperationFactory(); 
            Operation operation = factory.getOperation(); 
            operation.setNum1(num1); 
            operation.setNum2(num2); 
            result = operation.getResult(); 
        } 
 
        //3.返回结果 
        System.out.println(strNum1 + oper + strNum2 + "=" + result); 
    } 
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值