简单工厂
2016-11-29 本文已影响0人
swowg
使用简单工厂实现一个简单的计算器。
一、新建类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;