从编写简单计算器,来学习简单工厂模式。
1、Operation.java
public abstract class Operation
{
private double numA;
private double numB;
public double getNumA()
{
return numA;
}
public void setNumA(double numA)
{
this.numA = numA;
}
public double getNumB()
{
return numB;
}
public void setNumB(double numB)
{
this.numB = numB;
}
public abstract double getResult();
}
public class OperationAdd extends Operation
{
@Override
public double getResult()
{
double result = 0.00;
result = super.getNumA() + super.getNumB();
return result;
}
}
3、OperationSub.java
public class OperationSub extends Operation
{
@Override
public double getResult()
{
double result=0;
result=super.getNumA()-super.getNumB();
return result;
}
}
4、OperationMul.java
public class OperationMul extends Operation
{
@Override
public double getResult()
{
double result=0;
result=super.getNumA()*super.getNumB();
return result;
}
}
5、OperationDiv.java
public class OperationDiv extends Operation
{
@Override
public double getResult()
{
double result = 0;
if (super.getNumB() != 0)
{
result = super.getNumA() / super.getNumB();
}
else
{
System.out.println("除数不能为零");
}
return result;
}
}
6、OperationFactory.java
public class OperationFactory
{
public static Operation createOperate(String operate)
{
Operation oper=null;
switch(operate)
{
case "+":
oper=new OperationAdd();
break;
case "-":
oper=new OperationSub();
break;
case "*":
oper=new OperationMul();
break;
case "/":
oper=new OperationDiv();
break;
}
return oper;
}
}
7、测试程序Client.java
import java.util.Scanner;
public class Client
{
private static Operation oper;
private static Scanner in;
public static void main(String[] args)
{
oper = null;
in = new Scanner(System.in);
System.out.println("请输入符号(+、-、*、/):");
String model = in.nextLine();
oper=OperationFactory.createOperate(model);
System.out.println("请输入数字a:");
String strNumA = in.nextLine();
oper.setNumA(Double.parseDouble(strNumA));
System.out.println("请输入数字b:");
String strNumB = in.next();
oper.setNumB(Double.parseDouble(strNumB));
double result=oper.getResult();
System.out.println(result);
}
}
这里面省略了计算器的界面设计,通过工厂模式设计的计算器,容易拓展,代码修改起来也比较简单。这样的代码重用性也很高。