工厂模式定义:实例化对象,用工厂方法代替new操作。
现在来测试我们的测试类。
由以上测试类可以看出:我们直接使用的是运算工厂创建的加法类,并没有使用new的方式进行创建,而是通过运算工厂创建。
工厂模式在Java程序系统可以说是随处可见。因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=new A() 工厂模式也是用来创建实例对象的,所以以后new时就要多个心眼,是否可以考虑使用工厂模式,虽然这样做,可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量。
以简单的计算器的后台开发为例。
计算器包括加减乘除,为了松耦和,设计了四个运算类(OperationAdd、OperationSub、OperationMul、OperationDiv)。同时在运算类中每个类都具有运算方法,因此设计了一个运算接口(Operation)。
运算接口:
package com;
public interface Operation {
public double getResult(double numberA, double numberB);
}
运算类:
package com.operation;
import com.Operation;
public class OperationAdd implements Operation {
@Override
public double getResult(double numberA, double numberB) {
// TODO Auto-generated method stub
return numberA+numberB;
}
}
package com.operation;
import com.Operation;
public class OperationSub implements Operation {
@Override
public double getResult(double numberA, double numberB) {
// TODO Auto-generated method stub
return numberA-numberB;
}
}
package com.operation;
import com.Operation;
public class OperationMul implements Operation {
@Override
public double getResult(double numberA, double numberB) {
// TODO Auto-generated method stub
return numberA*numberB;
}
}
package com.operation;
import com.Operation;
public class OperationDiv implements Operation {
@Override
public double getResult(double numberA, double numberB) {
// TODO Auto-generated method stub
return numberA/numberB;
}
}
简单工厂模式,创建运算工厂类(OperationFactory),即在用到运算类时,可以直接产生相应的运算类,而不需要再进行new创建。
package com.operation.factory;
import com.Operation;
import com.operation.OperationAdd;
import com.operation.OperationDiv;
import com.operation.OperationMul;
import com.operation.OperationSub;
public class OperationFactory {
public static Operation CreateOperation(char op){
Operation opertion = null;
switch(op){
case '+':
opertion = new OperationAdd();
break;
case '-':
opertion = new OperationSub();
break;
case '*':
opertion = new OperationMul();
break;
case '/':
opertion = new OperationDiv();
break;
}
return opertion;
}
}
现在来测试我们的测试类。
import com.Operation;
import com.operation.factory.OperationFactory;
public class OpertionTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
double numberA = 9.0;
double numberB = 1.0;
Operation op = OperationFactory.CreateOperation('+');
//op.getResult(numberA, numberB);
System.out.println( op.getResult(numberA, numberB) );
}
}
由以上测试类可以看出:我们直接使用的是运算工厂创建的加法类,并没有使用new的方式进行创建,而是通过运算工厂创建。
总结:
(1)如果我们想添加sin运算方法,我们只需要编写OperationSin类,在我们使用时只要通过OperationFactory来生产。
(2)工厂模式实现系统的可扩展性。