14.4注册工厂(大话简单工厂)

呆呆的计算器(version 1.0)
这段代码是来自大话,小菜最开始的面试代码。小菜是一个小白。嗯,小菜果然是个小白。小菜好白。

public class Program {
    public static void main(String[] args) {
        int result = 0;
        System.out.println("请输入数字A");
        String a = "123";
        System.out.println("请选择运算符号(+、-、*、/):");
        String b = "+";
        System.out.println("请输入数字B");
        String c = "321";
        String d = "";

        if (b.equals("+"))
            result = Integer.parseInt(a) + Integer.parseInt(c);
        c = result + "";
        System.out.println(c);
    }
}

呆呆计算器(version 2.0)
老鸟说小菜,写的代码不规范。不是一个合格的牛马。然后小菜励志要做一个合格的牛马,然后改了一版。
规范了命名。

public class Program2 {
    public static void main(String[] args) {
        System.out.println("请输入数字A");
        String strNumberA = "123";

        System.out.println("请选择运算符号(+、-、*、/):");
        String strOperate = "+";

        System.out.println("请输入数字B");
        String strNumberB = "321";

        String strResult = "";
        int result = 0;

        switch (strOperate) {
            case "+" :
                result = Integer.parseInt(strNumberA) + Integer.parseInt(strNumberB);
                break;
            case "-" :
                result = Integer.parseInt(strNumberA) - Integer.parseInt(strNumberB);
                break;
            case "*" :
                result = Integer.parseInt(strNumberA) * Integer.parseInt(strNumberB);
                break;
            case "/" :
                if (!strNumberB.equals("0"))
                    result = Integer.parseInt(strNumberA) / Integer.parseInt(strNumberB);
                else
                    strResult = "除数不能为0";
                break;
        }

        System.out.print("结果是 :" + result);
        System.out.println(strResult);
    }
}

呆呆计算器(version 3.0)
把逻辑计算代码与用户界面代买分离

public class Operation {
    public static double getResult(double numberA, double numberB, String operate) {
        double result = 0;

        switch (operate) {
            case "+" : result = numberA + numberB;
            break;
            case "-" : result = numberA - numberB;
            break;
            case "*" : result = numberA * numberB;
            break;
            case "/" : result = numberA / numberB;
            break;
        }

        return result;
    }
}
public class Program3 {

    public static void main(String[] args) {

        System.out.println("请输入数字A");
        String strNumberA = "123";

        System.out.println("请选择运算符号(+、-、*、/):");
        String strOperate = "+";

        System.out.println("请输入数字B");
        String strNumberB = "321";

        String strResult = "";

        strResult =
        "" + (Operation.getResult(Double.parseDouble(strNumberA), Double.parseDouble(strNumberB), strOperate));

        System.out.print("结果是 :" + strResult);
        System.out.println(strResult);
    }
}

呆呆计算器(version 4.0) 大招来了

基类将不变的东西放在基类,将变化的东西放在子类。

public abstract class Operation2 {
    public double numberA = 0;
    public double numberB = 0;

    public double result = 0;

    public double getNumberA() {
        return numberA;
    }

    public void setNumberA(double numberA) {
        this.numberA = numberA;
    }

    public double getNumberB() {
        return numberB;
    }

    public void setNumberB(double numberB) {
        this.numberB = numberB;
    }

    public abstract double getResult_();
}

加法计算子类

public class OperationAdd extends Operation2 {
    @Override
    public double getResult_() {
        result = numberA + numberB;
        return result;
    }
}

减法计算子类

public class OperationSub extends Operation2 {
    @Override
    public double getResult_() {
        result = numberA - numberB;
        return result;
    }
}

乘法计算子类

public class OperationMul extends Operation2 {
    @Override
    public double getResult_() {
        result = numberA * numberB;
        return result;
    }
}

除法计算子类

public class OperationDiv extends Operation2 {
    @Override
    public double getResult_() {
        if (numberB != 0)
            result = numberA / numberB;
        else
//            throw new Exception("除数不能为0");
        System.out.println("除数不能为0");
        return result;
    }
}

工厂类 工厂类 工厂粪

public class OperationFactory {

    public static Operation2 operation = null;

    public static Operation2 createOperation(String opera) {
          switch (opera) {
              case "+" : operation = new OperationAdd();
              break;
              case "-" : operation = new OperationSub();
              break;
              case "*" : operation = new OperationMul();
              break;
              case "/" : operation = new OperationDiv();
              break;
          }
            return operation;
    }

Please see the magic

public class Program4 {
    public static void main(String[] args) {
        Operation2 operation = null;

        operation = OperationFactory.createOperation("+");

        operation.setNumberA(123);
        operation.setNumberB(321);

        System.out.println("" + operation.getResult_());
    }
}

真他么简洁,这就是艺术!This is art.


image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容