简单工厂模式:属于创建型模式又叫做静态工厂方法模式,它属于类创建型模式。
简单工厂模式中:根据参数的不同返回不同类的实例。
简单工厂模式:专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
package designPattern; /** * Operation 运算类: * 创建的实例通常都具有共同的父类 */ public class Operation { private double _numberA=0; private double _numberB=0; public double get_numberA() { return _numberA; } public void set_numberA(double _numberA) { this._numberA = _numberA; } public double get_numberB() { return _numberB; } public void set_numberB(double _numberB) { this._numberB = _numberB; } public double GetResult() throws Exception { double result=0; return result; } } /** * 加法运算类,继承运算类 */ class OperationAdd extends Operation{ /** * 重写 Operation 运算类 的 GetResult方法 * @return result */ public double GetResult(){ double result=0; result=get_numberA()+get_numberB(); return result; } } /** * 减法运算类,继承运算类 */ class OperationSub extends Operation{ /** * 重写 Operation 运算类 的 GetResult方法 * @return result */ public double GetResult(){ double result=0; result=get_numberA()-get_numberB(); return result; } } /** * 乘法运算类,继承运算类 */ class OperationMul extends Operation{ /** * 重写 Operation 运算类 的 GetResult方法 * @return result */ public double GetResult(){ double result=0; result=get_numberA()*get_numberB(); return result; } } /** * 除法运算类,继承运算类 */ class OperationDiv extends Operation{ /** * 重写 Operation 运算类 的 GetResult方法 * @return result */ public double GetResult() throws Exception { double result=0; if(get_numberB()==0) throw new Exception("除数不能为0."); result=get_numberA()/get_numberB(); return result; } }
package designPattern; /** * 算法工厂: * 专门定义一个类来负责创建其他类的实例 */ 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; } return operation; } public static void main(String[] args) { Operation operation; //根据参数的不同返回不同类的实例 operation =OperationFactory.createOperate("+"); operation.set_numberA(1); operation.set_numberB(2); try { double result=operation.GetResult(); } catch (Exception e) { e.printStackTrace(); } } }