简单工厂模式定义:简单工厂模式又称为静态工厂方法模型,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
简单工厂模式优点 : 只需传入正确的参数 , 就可以获取需要的对象 , 无需知道创建细节 ;
工厂类中有必要的判断逻辑 , 可以决定根据当前的参数创建对应的产品实例 , 客户端可以免除直接创建产品对象的责任 ;通过该模式实现了对创建实例和使用实例的责任分割 ;
提供专门的工厂类用于创建对象 , 客户端无需知道所创建的产品类的类名 , 只需要知道对应产品类的参数即可创建对象实例 ;
简单工厂模式缺点 : 工厂类职责过重 , 如果要增加新的产品 , 需要修改工厂类的判断逻辑 , 违背 " 开闭原则 " ;
7大设计原则 , 不能全部遵守 , 也不能不遵守 , 需要平衡功能和系统复杂度 , 找到最合适的一个点 ;
类图:
加减乘除继承自运算类,工厂类关联运算类
demo:
public class Operation {
private double numberA;
private double numberB;
public double getResult() throws Exception {
return 0;
}
public double getNumberA() {
return numberA;
}
public void setNumberA(double numberA) {
this.numberA = numberA;
}
public double getNumberB() {
return numberB;
}
public void setNumberB(double numberB) {
this.numberB = numberB;
}
}
public class OperationAdd extends Operation{
@Override
public double getResult() {
double result = 0;
result = getNumberA()+getNumberB();
return result;
}
}
public class OperationSub extends Operation{
@Override
public double getResult() {
double result = 0;
result = getNumberA() - getNumberB();
return result;
}
}
public class OperationMul extends Operation{
@Override
public double getResult() {
double result = 0;
result = getNumberA() * getNumberB();
return result;
}
}
public class OperationDiv extends Operation{
@Override
public double getResult() throws Exception {
double result;
if (getNumberB() == 0) {
throw new Exception("除数不能为0!");
}
result = getNumberA() / getNumberB();
return result;
}
}
public class OperationFactory {
public static Operation createOperate(String operate) {
Operation operation = null;
switch (operate) {
case "+":
operation = new OperationAdd();
break;
case "-":
operation = new OperationSub();
break;
case "*":
operation = new OperationMul();
break;
case "/":
operation = new OperationDiv();
break;
default:
break;
}
return operation;
}
}
public class Main {
public static void main(String[] args) throws Exception {
Operation operation;
operation = OperationFactory.createOperate("+");
operation.setNumberA(1);
operation.setNumberB(2);
double result = operation.getResult();
System.out.println("result == " + result);
}
}
加减乘除继承自运算类,要增加其他运算只需要再新创建一个类就好了,不会影响到其他的运算类,并且我们需要什么运算只需将操作符提供给工厂,由工厂创建对象,不需要直接创建,nice~