简单工厂模式的作用:用一个工厂类,来负责创建实例对象
我通过一个简单的模拟计算器的功能来说明简单工厂模式的使用:
创建一个Operation类,这个类作为基类,提供两个变量用来接收我们的输入参数,提供一个用来返回计算结果的方法
public 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 Double getResult(){
Double result = 0.0;
return result;
}
}
创建加、减、乘、除四个基本的计算方法的类,继承Operation类:
/**
* 加法类
* @author thinkpad
*
*/
class OperationAdd extends Operation{
@Override
public Double getResult() {
Double result = 0.0;
result = getNumA()+getNumB();
return result;
}
}
/**
* 减法类
* @author thinkpad
*
*/
class OperationSub extends Operation{
@Override
public Double getResult() {
Double result = 0.0;
result = getNumA()-getNumB();
return result;
}
}
/**
* 乘法类
* @author thinkpad
*
*/
class OperationMul extends Operation{
@Override
public Double getResult() {
Double result = 0.0;
result = getNumA()*getNumB();
return result;
}
}
/**
* 除法类
* @author thinkpad
*
*/
class OperationDiv extends Operation{
@Override
public Double getResult() {
Double result = 0.0;
if(getNumB()==0){
throw new RuntimeException("除数不能为0");
}
result = getNumA()/getNumB();
return result;
}
}
接下来创建工厂类,用来负责创建不同运算的对象:
public class CreateFactory {
public static Operation createFactory(String operate){
Operation oper = null;
if(operate.equals("+")){
oper = new OperationAdd();
}
else if(operate.equals("-")){
oper = new OperationSub();
}
else if(operate.equals("*")){
oper = new OperationMul();
}
else if(operate.equals("/")){
oper = new OperationDiv();
}
return oper;
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入数字A");
Double numA = input.nextDouble();
System.out.println("请输入操作");
String oper = input.next();
System.out.println("请输入数字B");
Double numB = input.nextDouble();
Operation create = new Operation();
create =CreateFactory.createFactory(oper); //根据我们的操作从工厂类中创建对应的实例对象
create.setNumA(numA);
create.setNumB(numB);
double result = create.getResult();
System.out.println(numA+" "+oper+""+numB+"="+result);
}
}