简单工厂-简单计算器(仿照《大话设计模式》中示例)

来源:互联网 发布:linux文件服务器有哪些 编辑:程序博客网 时间:2024/06/05 15:01

一个抽象操作类。

四个分别实现了加、减、乘、除的子操作类。

根据用户前台输入的操作符不同,利用工厂生成对应操作类对象,返回的是一个抽象的操作类。

利用多态调用操作类的计算结果方法(不同操作类的算法不一样)。


好处:各操作算法相隔离,互不影响。增加修改比较灵活。


抽象操作类型

package simpleFactory.calculator;public abstract class Operation {protected int numberA;protected int numberB;public int getNumberA() {return numberA;}public void setNumberA(int numberA) {this.numberA = numberA;}public int getNumberB() {return numberB;}public void setNumberB(int numberB) {this.numberB = numberB;}public abstract int getResult();}

具体操作类

package simpleFactory.calculator;public class OperationAdd extends Operation {@Overridepublic int getResult() {// TODO Auto-generated method stubreturn this.getNumberA()+this.getNumberB();}}


操作符枚举

package simpleFactory.calculator;public enum Operator {ADD,SUB,MUL,DIV;}

工厂类


package simpleFactory.calculator;public class OperationFactory { public static Operation createOperation(String operator){ switch(Operator.valueOf(operator)){ case ADD: return new OperationAdd(); case SUB: return new OperationSub(); case MUL: return new OperationMul(); case DIV: return new OperationDiv(); } return null; }}

程序入口


package simpleFactory.calculator;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class MainClass {/** * @param args * @throws IOException  * @throws NumberFormatException  */public static void main(String[] args) throws NumberFormatException, IOException {// TODO Auto-generated method stubwhile(true){System.out.println("请输入第一位操作数字");BufferedReader br = new BufferedReader(new InputStreamReader(System.in));int numberA = Integer.parseInt(br.readLine());System.out.println("请输入第二位操作数字");int numberB = Integer.parseInt(br.readLine());System.out.println("请输入操作符"); String operator = br.readLine(); Operation operation = OperationFactory.createOperation(operator); operation.setNumberA(numberA); operation.setNumberB(numberB); System.out.println(operation.getResult()); System.out.println("是否继续Y/N"); String continueInput = br.readLine(); if(!continueInput.equals("Y")){ break; }}}}



原创粉丝点击