大话设计模式中简单工厂模式笔记
拿计算器举例:
要实现简单的计算器功能,计算类需要根据输入的计算符号完成相应的工作,可以先创建一个计算父类BaseOperation
public class BaseOperation { private Double numberA; private Double numberB; 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 Double getResult() throws Exception { Double result=0d; return result; } }
计算父类中包含前后数字和一个获得结果的方法,之后创建计算子类,继承父类的成员numberA和numberB,重写getResult方法
public class OperationAdd extends BaseOperation{ @Override public Double getResult() { Double result=0d; result=getNumberA()+getNumberB(); return result; } } public class OperationSub extends BaseOperation{ @Override public Double getResult() { Double result=0d; result=getNumberA()-getNumberB(); return result; } } public class OperationMul extends BaseOperation{ @Override public Double getResult() { Double result=0d; result=getNumberA()*getNumberB(); return result; } } public class OperationDiv extends BaseOperation{ @Override public Double getResult() throws Exception{ Double result=0d; if(getNumberB()==0){ throw new Exception("除数不能为0"); } result=getNumberA()/getNumberB(); return result; } }
这里只实现了加减乘除的子类,之后创建一个工厂类来生产计算类,根据传入的计算符号生产相应的计算类
public class OperationFactory { public static BaseOperation createOperation(String operation) throws Exception{ BaseOperation baseOperation=null; switch (operation){ case "+": baseOperation=new OperationAdd(); break; case "-": baseOperation=new OperationSub(); break; case "*": baseOperation=new OperationMul(); break; case "/": baseOperation=new OperationDiv(); break; default: throw new Exception("输入运算符格式不对"); } return baseOperation; } }
在主方法中调用
public static void main(String[] args) throws Exception{ BaseOperation operation = OperationFactory.createOperation("+"); operation.setNumberA(2d); operation.setNumberB(8d); Double countResult = operation.getResult(); System.out.println(countResult); }
需要新的计算功能时只需要创建相关的子类,并修改工厂类的代码即可。虽然是一个简单的计算器实现,但是运用上简单工厂模式后,让代码的可维护性,可扩展性,灵活性都大大的增加了。
个人理解,工厂模式就是将有相同成员变量功能相近的类,先抽象出一个父类,之后根据不同的功能去创建子类重写功能代码,然后通过工厂类传入判断条件,判断需要哪个功能类,由工厂来创建功能类供其他方法调用。