java设计模式_工厂模式在开发中的运用

一、工厂模式在开发中的运用

面试题: 写一个简单的计算器。

//示例示1:
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;
        //2.进行运算
        if("+".equals(oper)){
            result = Double.valueOf(strNum1) + Double.valueOf(strNum2);
        } else if ("-".equals(oper)) {
            result = Double.valueOf(strNum1) - Double.valueOf(strNum2);
        } else if("*".equals(oper)) {
            result = Double.valueOf(strNum1) * Double.valueOf(strNum2);
        } else if("/".equals(oper)) {
            result = Double.valueOf(strNum1) / Double.valueOf(strNum2);
        }

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

    }

}

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

//示例2: 简单工厂模式
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();
}

public class AddOperation extends Operation {

    @Override
    public double getResult() {
        double result = this.getNum1() + this.getNum2();
        return result;
    }


}
public class SubtractionOperation extends Operation {

    @Override
    public double getResult() {
        double result = this.getNum1() - this.getNum2();
        return result;
    }


}

public class MultiplyOperation extends Operation {

    @Override
    public double getResult() {
        double result = this.getNum1() * this.getNum2();
        return result;
    }


}
public class DividedOperation extends Operation {

    @Override
    public double getResult() {
        double result = this.getNum1() / this.getNum2();
        return result;
    }


}
public class OperationFactory {

    public static Operation getOperation(String oper){
        if("+".equals(oper)) {
            return new AddOperation();
        } else if("-".equals(oper)) {
            return  new SubtractionOperation();
        } else if("*".equals(oper)) {
            return new MultiplyOperation();
        } else if("/".equals(oper)) {
            return new DividedOperation();
        }

        return null;
    }

}


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.进行运算
        Operation operation = OperationFactory.getOperation(oper);
        operation.setNum1(num1);
        operation.setNum2(num2);
        result = operation.getResult();

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

    }

//示例3: 工厂模式 
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();
}

public class AddOperation extends Operation {

    @Override
    public double getResult() {
        double result = this.getNum1() + this.getNum2();
        return result;
    }


}
public class SubtractionOperation extends Operation {

    @Override
    public double getResult() {
        double result = this.getNum1() - this.getNum2();
        return result;
    }


}
public class MultiplyOperation extends Operation {

    @Override
    public double getResult() {
        double result = this.getNum1() * this.getNum2();
        return result;
    }


}
public interface OperationFactory {

    public Operation getOperation();

}
public class AddOperationFactory implements OperationFactory {

    @Override
    public Operation getOperation() {
        return new AddOperation();
    }


}

public class SubtractionOperationFactory implements OperationFactory {

    @Override
    public Operation getOperation() {
        return new SubtractionOperation();
    }


}
public class MultiplyOperationFactory implements OperationFactory {

    @Override
    public Operation getOperation() {
        return new MultiplyOperation();
    }


}
public class DivideOperationFactory implements OperationFactory {

    @Override
    public Operation getOperation() {
        return new DividedOperation();
    }


}

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);

        OperationFactory factory = null;
        //2.进行运算
        if("+".equals(oper)) {
            factory = new AddOperationFactory();
        } else if("-".equals(oper)) {
            factory = new SubtractionOperationFactory();
        } else if("*".equals(oper)) {
            factory = new MultiplyOperationFactory();
        } else if("/".equals(oper)) {
            factory = new DivideOperationFactory();
        }

        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、付费专栏及课程。

余额充值