一.具有加减乘除的计算器
(1)
//运算类
public class Operation {
private double numberA = 0 ;
private double numberB = 0 ;
public double getNumberA() {
return numberA;
}
public void setNumberA(double numberA) {
this.numberA = numberA;
}
public double getNumberB() {
return numberB;
}
public void setNumberB(double numberB) {
this.numberB = numberB;
}
public double getResult() throws Exception{
double result = 0 ;
return result ;
}
}
(2)
//加法
public class OperationAdd extends Operation {
@Override
public double getResult(){
double result = 0 ;
result = getNumberA() + getNumberB() ;
return result ;
}
}
//减法
public class OperationSub extends Operation {
@Override
public double getResult(){
double result = 0 ;
result = getNumberA() - getNumberB() ;
return result ;
}
}
//乘法
public class OperationMul extends Operation {
@Override
public double getResult(){
double result = 0 ;
result = getNumberA() * getNumberB() ;
return result ;
}
}
//除法
public class OperationDiv extends Operation {
@Override
public double getResult() throws Exception {
double result = 0 ;
if(getNumberB()==0)
throw new Exception("除数不能为0");
result = getNumberA() / getNumberB() ;
return result ;
}
}
(3)工厂类
//计算器工厂类,根据需求生产对应的类
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;
default:
break;
}
return oper ;
}
}
(4)Test
public class MainTest {
public static void main(String[] args) throws Exception {
Operation oper = OperationFactory.createOperate("+");
oper.setNumberA(1);
oper.setNumberB(2);
double result = oper.getResult();
System.out.println(result);
}
}
2.类图
3.工厂模式解决对象的创建问题
4.简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例相关的类,对于客户端来说,去除了与具体产品的依赖。