以一个简单的计算器代码为例,来述说简单工厂设计模式。
运算类:
public class Operator_factory {
Operator oper;
public Operator operator(String oper){
switch(oper){
case "+":
this.oper = new AddOperator();
break;
case "-":
this.oper = new SubOperator();
break;
case "*":
this.oper = new MulOperator();
break;
case "/":
this.oper = new DivOperator();
break;
}
return this.oper;
}
}
加减乘除类:
//加
public class AddOperator extends Operator{
public double getResult(){
double result = 0;
result = getStrNumberA() + getStrNumberB();
return result;
}
}
//减
public class SubOperator extends Operator{
public double getResult(){
double result = 0;
result = getStrNumberA() - getStrNumberB();
return result;
}
}
//乘
public class MulOperator extends Operator{
public double getResult(){
double result = 0;
result = getStrNumberA() * getStrNumberB();
return result;
}
}
//除
public class DivOperator extends Operator{
public double getResult(){
double result = 0;
if(getStrNumberB() == 0) System.out.println("除数不能为0!");
result = getStrNumberA() * getStrNumberB();
return result;
}
}
//这些类继承了Operator类,实现多态性。方便代码维护和扩展。
工厂类
public class Operator_factory {
Operator oper;
public Operator operator(String oper){
switch(oper){
case "+":
this.oper = new AddOperator();
break;
case "-":
this.oper = new SubOperator();
break;
case "*":
this.oper = new MulOperator();
break;
case "/":
this.oper = new DivOperator();
break;
}
return this.oper;
}
}
测试类
public class Test {
public static void main(String[] args) {
Operator oper = new Operator_factory().operator("+"); //根据实际情况,调用工厂方法实例化各个类
oper.setStrNumberA(1);
oper.setStrNumberB(1);
System.out.println(oper.getResult());
}
}
工厂设计模式的好处:一是解耦,二是方便代码的维护和扩展。