定义:定义一个创建对象的接口,简单工厂模式又称静态工厂方法模式。
UML类图:①工厂类:根据传进来的参数标志创建具体子类。②抽象父类:具有公共功能的接口或抽象类。③具体子类:继承抽象父类,重写父类的公共方法,实现不同的业务逻辑。
案例:计算器
工厂类:
public class OperatorFactory { public static int[] OPERATOR_TYPES = {'+','-','*','/','s'}; public static SuperOperate createOperate(int operate){ SuperOperate superOperate = null; if(OPERATOR_TYPES[0] == operate){ superOperate = new AddOperate(); }else if(OPERATOR_TYPES[1] == operate){ superOperate = new AddOperate(); }else if(OPERATOR_TYPES[2] == operate){ superOperate = new AddOperate(); }else if(OPERATOR_TYPES[3] == operate){ superOperate = new AddOperate(); }else if(OPERATOR_TYPES[4] == operate){ superOperate = new AddOperate(); } return superOperate; } }抽象父类:
public class SuperOperate { public double numberA; public double numberB; public double getResult(){ return 0.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 AddOperate extends SuperOperate { @Override public double getResult() { return numberA + numberB; } }优点:①扩展性好,如果想加一个新的业务逻辑,只需要新增一个具体子类。②只需要知道工厂类的创建对象方法的参数,就可以创建具体子类。
缺点:①新增业务逻辑时,每次都需要增加新的具体子类和工厂类逻辑,具体子类太多,维护困难。②简单工厂模式由于使用了静态工厂方法,造成工厂角色无法形成基于继承的等级结构。
