<Java设计模式>—简单工厂模式
简单工厂模式又称静态工厂方法模式。重命名上就可以看出这个模式一定很简单。它存在的目的很简单:定义一个用于创建对象的接口。
在简单工厂模式中,一个工厂类处于对产品类实例化调用的中心位置上,它决定那一个产品类应当被实例化,如同一个交通警察站在来往的车辆流中,决定放行那一个方向的车辆向那一个方向流动一样。
先来看看它的组成:
1) 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。在java中它往往由一个具体类实现。
2) 抽象产品角色:它一般是具体产品继承的父类或者实现的接口。在java中由接口或者抽象类来实现。
3) 具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。
下面来看下一个运算对象的简单工程的设计模式UML:
具体的对应关系:
工厂类角色——>简单工厂类
抽象产品角色——>运算类
具体产品角色——>加法类,减法类,乘法类,除法类
根据上面UML,写咱们的代码:
/**
* 运算类
*/
abstract class Operation{
public double numberA;
public double numberB;
public abstract double getResult();
}
/**
* 加法类(减法(OperationSub)、乘法(OperationMul)、除法(OperationDiv)请参考加法写法)
*/
class OperationAdd extends Operation{
public double getResult(){
return numberA+numberB;
}
}
/**
* 简单工厂类
*/
class OperationFactory{
public static final int ADD = 1;//加法
public static final int SUB = 2;//减法
public static final int MUL = 3;//乘法
public static final int DIV = 4;//除法
public Operation createOperation(int operationType){
swtich(operationType){
case ADD:
return new OperationAdd();
break;
case SUB:
return new OperationSub();
break;
case MUL:
return new OperationMul();
break;
case DIV:
return new OperationDiv();
break;
}
}
}
/**
* 客户端代码
**/
class Client{
public static void main(String[] args){
Operation operation= OperationFactory.createOperation(OperationFaction.ADD);
Operation.numberA = 22;
Operation.numberB = 23;
System.out.println(“远算结果:”+operation.getResult());
}
}
个人总结:相对于之前直接new出对象,降低了耦合性,客户端只要认识两个类(Operation、OperationFactory),也就是说客户端都无需导入像加法类,减法类等的包,客户端只需给2数,和相应的计算方式,然后得出结果,至于你是怎么运算,客户端并不关心;但是有个弊端就是假如将来需要拓展,那就比较麻烦了,那我们就必须去修改OperationFactory这个类中的switch代码,如果将来拓展很多的算法,那么这个类将是非常臃肿的。