美文网首页
简单工厂

简单工厂

作者: swowg | 来源:发表于2016-11-29 14:26 被阅读0次

    使用简单工厂实现一个简单的计算器。

    一、新建类Operation:

    public class Operation {
        private double NumberA = 0;
        private double NumberB = 0;
        public double getResult(){
            double result = 0;
            return result;
        }
        public String getInfo(){
            String info = "";
            return info;
        }
        public double getNumberA() {
            return NumberA;
        }
        public void setNumberA(double numberA) {
            NumberA = numberA;
        }
        public double getNumberB() {
            return NumberB;
        }
        public void setNumberB(double numberB) {
            NumberB = numberB;
        }
    }
    

    二、添加算数运算符方法,这里只支持简单的四则运算。
    a、加法:

    public class OperationAdd extends Operation {
        @Override
        public double getResult() {
            double result = 0;
            result = super.getNumberA() + super.getNumberB();
            return result;
        }
    }
    

    b、减法:

    public class OperationSub extends Operation {
        @Override
        public double getResult() {
            double result = 0;
            result = super.getNumberA() - super.getNumberB();
            return result;
        }
    }
    

    c、乘法:

    public class OperationMul extends Operation {
        @Override
        public double getResult() {
            double result = 0;
            result = super.getNumberA() * super.getNumberB();
            return result;
        }
    }
    

    d、除法:

    public class OperationDiv extends Operation {
        @Override
        public double getResult() {
            double result = 0;
            result = super.getNumberA() / super.getNumberB();
            return result;
        }
    }
    

    三、创建用于判断需要执行那种运算(实例化那个Operation)的简单工厂类:

    public class OperationFactory {
        
        public static Operation createOperation(String oper){
            if(oper.equals("+")){
                return new OperationAdd();
            }else if(oper.equals("-")){
                return new OperationSub();
            }else if(oper.equals("*")){
                return new OperationMul();
            }else if(oper.equals("/")){
                return new OperationDiv();
            }else{
                return new OperationInfo();
            }
        }
    }
    

    四、创建程序执行的main方法:

    public class Calculator {
        public static void main(String[] args) {
            //创建Operation对象,
            Operation oper;
            //使用OperationFactory的createOperation方法创建具体的运算方法,并赋值给oper
            oper = OperationFactory.createOperation("+");
            //使用Operation的set方法为两个参加运算的变量赋值
            oper.setNumberA(1.0);
            oper.setNumberB(2.0);
            //调用oper的getResult方法或的运算结果
            double result = oper.getResult();
            //用于获得超出运算符范围的错误信息
            String getInfo = oper.getInfo();
            //如果错误信息不为空,就打印该信息
            if(!getInfo.equals("")){
                System.out.println(getInfo);
            }else{
                System.out.println(result);
            }
        }
    }
    

    分析下这个main方法的执行过程:
    1、实例化Operation对象oper,使用OperationFactory的静态方法createOperation(传入字符形式的运算符),此时在OperationFactory类中对比执行相应的else if语句,返回相应的对象。
    2、调用Operation的set方法为Operation中的变量赋值。
    3、调用相应运算类(这里是OperationAdd)的getResult方法,该方法中使用super.getNumberA、super.getNumberB来获得其父类中的NumberA和NumberB的值进行运算,最后将其运算结果进行打印。
    五、小结
    您可能会注意到,除了四则运算的四个类外,还有一个OperationInfo,这是为了处理当输入四则运算符以外的字符时给以友好的提示。(不知道这样处理好不好,本人新手还望大神指点一二。)
    注:文中涉及的类都同属一个包下例如:package com.sun.chapter01;

    相关文章

      网友评论

          本文标题:简单工厂

          本文链接:https://www.haomeiwen.com/subject/symapttx.html