邯郸网站建设做公司,企业服务平台公众号,网站建设免备案免费空间,全国免费发布广告信息平台定义#xff1a;又称静态工厂方法#xff0c;可以根据参数的不同返回不同类的实例#xff0c;专门定义一个类#xff08;工厂类#xff09;来负责创建其他类的实例可通过类名直接调用#xff0c;被创建的实例通常具有共同的父类。 UML图#xff1a; 例子#xff1a; 计…定义又称静态工厂方法可以根据参数的不同返回不同类的实例专门定义一个类工厂类来负责创建其他类的实例可通过类名直接调用被创建的实例通常具有共同的父类。 UML图 例子 计算器中的加减乘除可将不同的运算看成不同的对象通过工厂类进行构建传入你想创建的对象的运算符号。 基类运算对象确定运算参数和方法
public class Operation {private int numberA;private int numberB;/*** 计算数据结果通用方法*/public void count() {}public Operation() {}public Operation(int numberA, int numberB) {this.numberA numberA;this.numberB numberB;}public int getNumberA() {return numberA;}public void setNumberA(int numberA) {this.numberA numberA;}public int getNumberB() {return numberB;}public void setNumberB(int numberB) {this.numberB numberB;}
}派生类 加法运算对象继承基类
public class AddOperation extends Operation {Overridepublic void count() {System.out.println(this.getNumberA() this.getNumberB() (this.getNumberA() this.getNumberB()));}
}后续运算对象创建类似。
工厂对象创建提供一个统一的静态方法创建运算对象
public class OperationFactory {/*** 构建运算对象** param calSign* return*/public static Operation createOperation(String calSign) {Operation opr null;switch (calSign){case :opr new AddOperation();break;case -:opr new SubOperation();break;case *:opr new MutOperation();break;default:System.out.println(暂未设置该类型运算);}return opr;}
}执行
public static void main(String[] args) {Operation opr;try {// 加法运算opr OperationFactory.createOperation();opr.setNumberA(10);opr.setNumberB(12);opr.count();// 减法运算opr OperationFactory.createOperation(-);opr.setNumberA(10);opr.setNumberB(12);opr.count();// 乘法运算opr OperationFactory.createOperation(*);opr.setNumberA(10);opr.setNumberB(12);opr.count();// 除法运算opr OperationFactory.createOperation(/);opr.setNumberA(10);opr.setNumberB(12);opr.count();} catch (NullPointerException ignored) {}}总结 优点
降低对象与业务之间的耦合性隐藏对象的创建逻辑使得对象与相关业务的修改较为容易。
缺点
违背开放-封闭原则每新增一个业务便要修改工厂对象和创建新的对象增加了系统的复杂度和理解难度不便于维护和扩展