代码
产品类
package simple.service;
public abstract class Operation {
protected double numberA;
protected double numberB;
public abstract double getResult();
public void setNumberA(double numberA) {
this.numberA = numberA;
}
public void setNumberB(double numberB) {
this.numberB = numberB;
}
}
public class OperationAdd extends Operation {
public double getResult() {
return this.numberA+this.numberB;
}
}
public class OperationDiv extends Operation {
public double getResult() {
return this.numberA/this.numberB;
}
}
public class OperationMul extends Operation {
public double getResult() {
return this.numberA * this.numberB;
}
}
public class OperationSub extends Operation {
public double getResult() {
return this.numberA-this.numberB;
}
}
工厂类
public interface IOperationFactory {
Operation createOperation();
}
public class OperationAddFactory implements IOperationFactory{
@Override
public Operation createOperation() {
return new OperationAdd();
}
}
public class OperationDivFactory implements IOperationFactory {
@Override
public Operation createOperation() {
return new OperationDiv();
}
}
public class OperationMulFactory implements IOperationFactory {
@Override
public Operation createOperation() {
return new OperationMul();
}
}
public class OperationSubFactory implements IOperationFactory {
@Override
public Operation createOperation() {
return new OperationSub();
}
}
客户端
public class Client {
public static void main(String[] args) {
// 修改创建对象时,只需要修改后面的部分。不需要修改下面创建产品的类
IOperationFactory factory = new OperationAddFactory();
Operation operation = factory.createOperation();
operation.setNumberA(4.0);
operation.setNumberB(4.0);
System.out.println(operation.getResult());
}
}
特点
使用工厂方法模式克服了简单工厂违背开闭原则的特点,又保持了封装对象创建过程的特点。不过由于每一个产品有一个对应的工厂类,所以数量也会成倍增长。