文章目录
简单工厂模式——计算器
定义
工厂类实现创造实例的过程,可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。需要什么,只需要传入一个正确的参数,就可以获取所需要的对象,而无需知道其实现过程。
用例
需要实现一个计算器的功能,输入两个数,进行一次运算,输出结果。
Operation运算类
public class Operation{
private double _numberA = 0;
private double _numberB = 0;
public double getNumbleA(){
return _numberA;
}
public void setNumbleA(double _numberA){
this._numberA = _numberA ;
}
public double getNumbleB(){
return _numberB ;
}
public void setNumbleB(double _numberB){
this._numberB = _numberB ;
}
public abstract double getResult(){
double result = 0;
return result;
}
}
符号类:与运算类分开,如果需要增加、删除或者修改一个运算类型,无需其他运算符参与编译,降低对其他运算符的影响,增加安全。
class OperationAdd extends Operation{
@Override
public double getResult(){
double result = 0;
result = getNumbleA() + getResultB();
return result;
}
}
class OperationSub extends Operation{
@Override
public double getResult(){
double result = 0;
result = getNumbleA() - getResultB();
return result;
}
}
class OperationMul extends Operation{
@Override
public double getResult(){
double result = 0;
result = getNumbleA() * getResultB();
return result;
}
}
class OperationDiv extends Operation{
@Override
public double getResult(){
double result = 0;
if(NumberB == 0){
System.out.println("除数不能为0");
break;
}
result = getNumbleA() / getResultB();
return result;
}
}
简单工厂类:实现创造实例的过程。
public class OperationFactory{
public static Operation createOprate(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;
}
}
客户端代码:与运算过程分开,减少耦合,客户只要输入两个数和运算符号就可以知道结果,无需知道运算过程细节。
Operation oper;
oper = OperationFactory.createOperate("+");
oper.setNumberA = 1;
oper.SetNumberB = 3;
double result = oper.getResult();