粗略BB - 设计模式 - 简单工厂模式

2 篇文章 0 订阅
1 篇文章 0 订阅

简单工厂模式

今天看了一本关于设计模式的书随即写个笔记顺便总结下这本书是:《大话设计模式》

用代码实现一个简单的计算器

下面是最简单的实现计算机的代码

 Scanner scanner = new Scanner(System.in);

        System.out.println("第一个数字");
        double n1 = scanner.nextDouble();
        System.out.println("运算符");
        String opt = scanner.next();
        System.out.println("第二个数字");
        double n2 = scanner.nextDouble();
        String result = "";
        switch (opt) {
            case "+":
                result = String.valueOf((n1 + n2));
                break;
            case "-":
                result = String.valueOf((n1 - n2));

                break;
            case "*":
                result = String.valueOf((n1 * n2));

                break;
            case "/":
                result = String.valueOf((n1 / n2));
                break;
                default:
                    result = "输出的运算符错误";
        }
        System.out.println(result);

虽然我们可以实现加减乘除,但是呢 以后我们如果新加和改变功能的话会频繁的操作这个代码块,如果代码一直新增功能的话这个方法的业务逻辑将会变得愈来复杂所以我们使用面向对象的方式来简化这个代码块。

使用面向对象的方式简化计算器

public class Operation {

    public double add(double n1, double n2){
        return  (n1 + n2);
    }

    public double min(double n1, double n2){
        return  (n1 - n2);
    }


    public double mul(double n1, double n2){
        return  (n1 * n2);
    }


    public double exc(double n1, double n2){
        return  (n1 / n2);
    }

}

我们是用一个Operation类来把业务操作包装起来 如果我们新增和修改业务的话 我们只需要进行新增和修改对应的方法即可,但是我们作为面向对象来说我只用了 封装这个特性,当我们的业务量更大的话 这个类越发的不是那么简单的维护了,所以我们就使用更高级点的操作,简单工厂模式

使用简单工厂模式

抽象类给他们共同的行为

public interface Operation {


    /** 计算
     * @return result
     */
    double getResult(double number01 , double number02);

}

我们实现加法操作

public class AddOperation implements Operation {

    @Override
    public double getResult(double number01, double number02) {
        return number01 + number02;
    }

}

减法操作

public class MinOperation implements Operation {
    @Override
    public double getResult(double number01, double number02) {
        return number01 - number02;
    }
}

乘法操作

public class MulOperation implements Operation {
    @Override
    public double getResult(double number01, double number02) {
        return number01 * number02;
    }
}

除法操作

public class ExcOperation implements Operation {
    @Override
    public double getResult(double number01, double number02) {
        return number01 / number02;
    }
}

工厂类

public class OperationFactory {

    /**
     *  根据参数得到具体的运算类
     * @param command 指令
     * @return 运算类
     */
    public static Operation getOperation(String command){

        switch (command) {
            case "+":
                return  new AddOperation();
            case "-":
                return  new MinOperation();
            case "*":
                return  new MulOperation();
            case "/":
                return  new ExcOperation();
            default:
                return (m , n) -> -1;
        }

    }


}

执行操作

public class Run {

    public static void main(String[] args) {
        Operation operation = OperationFactory.getOperation("+");
        System.out.println(operation.getResult(1, 2));
    }


}

总结

我们在写代码的时候最初的时候就是只要能运行就是好了,当我们的业务庞大的时候我饭就感觉我们写的就是一堆屎山了,所以我们写代码的原则就是:可维护可复用易拓展 这三个特性加杂一起就是牛皮的代码。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值