- 图解简单工厂模式
- 定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使一个类的实例化延迟到其子类。
模块定义
简单工厂模式(Simple Factory Pattern):又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
模式结构
简单工厂模式包含如下角色:
Factory:工厂角色
工厂角色负责实现创建所有实例的内部逻辑
Product:抽象产品角色
抽象产品角色是所创建的所有对象的父类,负责描述所有实例所共有的公共接口
ConcreteProduct:具体产品角色
具体产品角色是创建目标,所有创建的对象都充当这个角色的某个具体类的实例。
public class SimpleFactoryDemo {
public static void main(String[] args) {
Operation oper = OperationFactory.createOpreation("+");
oper.numA = 1;
oper.numB = 2;
try {
double result = oper.getResult();
System.out.println(result);
} catch (Exception e) {
e.printStackTrace();
}
}
}
//工厂角色
class OperationFactory {
public static Operation createOpreation(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;
}
}
//抽象产品角色
abstract class Operation {
protected double numA;
protected double numB;
abstract double getResult() throws Exception;
}
//具体产品角色
class OperationAdd extends Operation {
@Override
double getResult() {
return numA + numB;
}
}
//具体产品角色
class OperationSub extends Operation {
@Override
double getResult() {
return numA - numB;
}
}
//具体产品角色
class OperationMul extends Operation {
@Override
double getResult() {
return numA * numB;
}
}
//具体产品角色
class OperationDiv extends Operation {
@Override
double getResult() throws Exception {
if (numB == 0)
throw new Exception("除数不能为0");
return numA / numB;
}
}