解释
简单工厂模式又称静态工厂方法模式。这个模式很简单。它存在的目的很简单:定义一个用于创建对象的接口。
使用很简单,使用也就不太强大,如果需求固定工厂类角色可以确定,是最优选择,如果修改较多不太合适.例如下面计算器代码,加减乘除通过switch选择确定,但是如果新增立方,工厂类就无法满足,需要修改,但是违反了开放-封闭原则(对扩展开放对更改封闭).需要使用到了工厂模式了.
具体代码
抽象产品角色
// 抽象产品角色:它一般是具体产品继承的父类或者实现的接口。
// 在java中由接口或者抽象类来实现。
public abstract class Operation {
private double nA = 0;
private double nB = 0;
public void setnA(double nA) {
this.nA = nA;
}
public void setnB(double nB) {
this.nB = nB;
}
public double getnA() {
return nA;
}
public double getnB() {
return nB;
}
public abstract double GetRsult();
}
工厂类角色
public class OperationFactory {
// 1) 工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。在java中它往往由一个具体类实现。
public static Operation createOper(String operate) {
Operation oper = null;
switch (operate) {
case "+":
oper = new OperationAdd();
break;
case "-":
oper = new OperationSub();
break;
case "*":
oper = new OperationMul();
break;
case "/":
oper = new OperationDiv();
break;
}
return oper;
}
}
具体产品角色
// 3) 具体产品角色:工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。
class OperationAdd extends Operation {
@Override
public double GetRsult() {
return getnA() + getnB();
}
}
class OperationSub extends Operation {
@Override
public double GetRsult() {
return getnA() - getnB();
}
}
class OperationMul extends Operation {
@Override
public double GetRsult() {
return getnA() * getnB();
}
}
class OperationDiv extends Operation {
@Override
public double GetRsult() {
if (getnB() != 0) {
return getnA() / getnB();
}
return 0;
}
}
测试类
public class Main {
// 简单工厂它存在的目的很简单:定义一个用于创建对象的接口。
// 在简单工厂模式中,一个工厂类(OperationFactory )处于对产品类实例化调用的中心位置上,
// 它决定那一个产品类应当被实例化, 如同一个交通警察站在来往的车辆流中,
// 决定放行那一个方向的车辆向那一个方向流动一样。
// 先来看看它的组成:
public static void main(String[] args) {
Operation oper;
oper = OperationFactory.createOper("-");
oper.setnA(3);
oper.setnB(3);
System.out.print(oper.GetRsult());
}