简单工厂模式及就是为了降低其内部的耦合,使得业务代码更加注重于业务,而且易于后期的维和。此处用一个简单的计算器实例来进行举例说明,
Operation类
package One;
/**
* 抽象类,主要有一些所有运算共有的属性
* @author 焦焱
*
*/
public abstract class Operation {
public double number_A = 0;
public double number_B = 0;
/**
* 通过实现此方法来获取不同运算的结果
* @return 结果
*/
public abstract double GetResult();
}
/**
* 加法类
* @author 焦焱
*
*/
class OperationAdd extends Operation{
@Override
public double GetResult() {
return number_A+number_B;
}
}
/**
* 减法类
* @author 焦焱
*
*/
class OperationSub extends Operation{
@Override
public double GetResult() {
return number_A-number_B;
}
}
/**
* 乘法类
* @author 焦焱
*
*/
class OperationMul extends Operation{
@Override
public double GetResult() {
return number_A*number_B;
}
}
/**
* 除法类
* @author 焦焱
*
*/
class OperationDiv extends Operation{
@Override
public double GetResult() {
if(number_B==0)
{
System.out.println("被除数不能为0");
return -1;
}
return number_A/number_B;
}
}
OperationFactory
/**
* 运算工厂
* @author 焦焱
*
*/
public class OperationFactory {
public static Operation createOperation(String operationName)
{
Operation oper = null;
switch (operationName) {
case "+":
oper = new OperationAdd();
break;
case "-":
oper = new OperationSub();
break;
case "*":
oper = new OperationMul();
break;
case "/":
oper = new OperationDiv();
break;
}
return oper;
}
}
通过此类就可以通过运算符获取其对应的运算类
Main
public class Main {
public static void main(String[] args) {
Operation oper;
oper = OperationFactory.createOperation("/");
oper.number_A=3;
oper.number_B=4;
System.out.println(oper.GetResult());
}
}
这样在后期扩展的时候,只需要在继承Operation 类书写一个运算类,然后在Factory里面加上一条分支即可,这样的代码易于维护,扩展,并且在扩展的时候不会影响到其他的已经写好的运算。
此代码的UML建模图为
可以看出此模式的核心在于工厂类以及,工厂加工对象他们的共有类的定义,如果可以定义一个好的基类,就可以免去大量的代码,而且使得代码的重用性,可维护性,可扩展性都大大提高。