• 《大话设计模式》--简单工厂模式


    题目:用java实现一个简单的计算器功能(用户从控制台输入)计算两个数和一个运算符号

    public class Optioner {
        private int numFirst;
        private int numSecond;
    
        public int getNumFirst() {
            return numFirst;
        }
    
        public void setNumFirst(int numFirst) {
            this.numFirst = numFirst;
        }
    
        public int getNumSecond() {
            return numSecond;
        }
    
        public void setNumSecond(int numSecond) {
            this.numSecond = numSecond;
        }
    
        public Optioner() {
        }
    
        public Optioner(int numFirst, int numSecond) {
            this.numFirst = numFirst;
            this.numSecond = numSecond;
        }
    
        public int getResult() {
            return 0;
        }
    }
    public class AddOptioner extends Optioner {
        @Override
        public int getResult() {
            return getNumFirst() + getNumSecond();
        }
    }
    
    public class SubOptioner extends Optioner {
        @Override
        public int getResult() {
            return getNumFirst() - getNumSecond();
        }
    }
    
    public class MulOptioner extends Optioner {
        @Override
        public int getResult() {
            return getNumFirst() * getNumSecond();
        }
    }
    
    public class DivOptioner extends Optioner {
        @Override
        public int getResult() {
            if (getNumSecond() == 0) {
                System.out.println("除数不能为0");
                return -1;
            } else {
                return getNumFirst() / getNumSecond();
            }
        }
    }
    public class OptionerFactory {
        public static Optioner createOptioner(String opt) {
            Optioner optioner = null;
            switch (opt) {
                case "+":
                    optioner = new AddOptioner();
                    break;
                case "-":
                    optioner = new SubOptioner();
                    break;
                case "*":
                    optioner = new MulOptioner();
                    break;
                case "/":
                    optioner = new DivOptioner();
                    break;
            }
            return optioner;
        }
    }
    public class Test {
        public static void main(String args[]) {
            Scanner scanner = new Scanner(System.in);
            System.out.print("请输入第一个数:");
            int numFirst = scanner.nextInt();
            System.out.print("请输入操作方式(+,-,*,/):");
            String opt = scanner.next();
            System.out.print("请输入第二个数:");
            int numSecond = scanner.nextInt();
            Optioner optioner = OptionerFactory.createOptioner(opt);
            optioner.setNumFirst(numFirst);
            optioner.setNumSecond(numSecond);
            System.out.println("结果为:" + optioner.getResult());
        }
    }

    Optioner是父类,根据情况不同,通过OptionerFactory工厂得到对应的实际操作类

    Optioner封装了两个参数和操作符,加减乘除类继承了Optioner,OptionerFactory中多态得到了对应的加减乘除类。

    加减乘除独自成类是为了拓展更多的操作运算,然后只要在工厂类中加判断条件即可,其他类不用动

  • 相关阅读:
    bzoj 3670: [Noi2014]动物园
    bzoj 2878: [Noi2012]迷失游乐园
    51nod 1348 乘积之和
    51nod 1514 美妙的序列
    AtCoder Grand Contest 002 D
    bzoj 3451 Normal
    LOJ #6119. 「2017 山东二轮集训 Day7」国王
    51nod 1752 哈希统计
    计蒜客 百度地图的实时路况
    Codeforces 549F Yura and Developers
  • 原文地址:https://www.cnblogs.com/anni-qianqian/p/7404341.html
Copyright © 2020-2023  润新知