本文举一个简单的例子,用来说明工厂模式。(实现一个加减乘除的计算器)
抽象操作类 :
package nc.lws.factory;
public abstract class AbstractOperation {
private double number1;
private double number2;
public double getNumber1() {
return number1;
}
public void setNumber1(double number1) {
this.number1 = number1;
}
public double getNumber2() {
return number2;
}
public void setNumber2(double number2) {
this.number2 = number2;
}
public abstract double getResult();
}
加减乘除实现类
package nc.lws.factory;
public class AddOperation extends AbstractOperation {
@Override
public double getResult() {
return this.getNumber1() + this.getNumber2();
}
}
package nc.lws.factory;
public class SubOperation extends AbstractOperation {
@Override
public double getResult() {
return this.getNumber1() - this.getNumber2();
}
}
package nc.lws.factory;
public class MutiOperation extends AbstractOperation {
@Override
public double getResult() {
return this.getNumber1() * this.getNumber2();
}
}
package nc.lws.factory;
public class DivOperation extends AbstractOperation {
@Override
public double getResult() {
return this.getNumber1() / this.getNumber2();
}
}
操作标记类:
package nc.lws.factory;
public enum OperationLabel {
ADD,
SUB,
MUTI,
DIV
}
工厂类:
package nc.lws.factory;
public class OperationFactory {
public static AbstractOperation createOperation(OperationLabel operation) {
AbstractOperation oper= null;
switch(operation) {
case ADD:
oper = new AddOperation();
break;
case SUB:
oper = new SubOperation();
break;
case MUTI:
oper = new MutiOperation();
break;
case DIV:
oper = new DivOperation();
break;
}
return oper;
}
}
客户端测试类:
package nc.lws.factory;
public class ClientMain {
/**
* @param args
*/
public static void main(String[] args) {
AbstractOperation oper = null;
//加法
oper = OperationFactory.createOperation(OperationLabel.ADD);
oper.setNumber1(1);
oper.setNumber2(2);
System.out.println("add TEST----->" +oper.getResult());
//减法
oper = OperationFactory.createOperation(OperationLabel.SUB);
oper.setNumber1(1);
oper.setNumber2(2);
System.out.println("sub TEST----->" +oper.getResult());
//乘法
oper = OperationFactory.createOperation(OperationLabel.MUTI);
oper.setNumber1(1);
oper.setNumber2(2);
System.out.println("muti TEST----->" +oper.getResult());
//除法
oper = OperationFactory.createOperation(OperationLabel.DIV);
oper.setNumber1(1);
oper.setNumber2(2);
System.out.println("div TEST----->" +oper.getResult());
}
}
例子虽然简单,但体现了java的三大特性:封装,继承与多态。
封装:具体操作为各种操作类,客户端调用为客户端类
继承:具体操作继承了抽象操作类
多态:客户端通过调用工厂方法动态实例化各种具体操作,而具体操作类又自动向上转型为抽象操作类