简单工厂模式SimpleFactory

来源:互联网 发布:低智商证明知乎 编辑:程序博客网 时间:2024/04/30 01:52

一、实现方式:由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。

二、模式角色及其职责

(1)工厂(Creator)角色

  简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。

(2)抽象产品(Product)角色

  简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。

(3)具体产品(Concrete Product)角色

  是简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。

 

《大话设计模式》应用实例:使用面向对象的语言实现一个计算机控制台程序,要求输入两个数和运算符号,得到结果

/** *Operation运算类  */public abstract class Operation {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 abstract double getResult() throws Exception;}


 

/** * OperationAdd加法类 */public class OperationAdd extends Operation{@Overridepublic double getResult() {return getNumberA() + getNumberB();}}


 

/** * OperationSub减法类 */public class OperationSub extends Operation{@Overridepublic double getResult() {return getNumberA() - getNumberB();}}


 

/** * OperationMul乘法类 */public class OperationMul extends Operation{@Overridepublic double getResult() {return getNumberA() * getNumberB();}}


 

/** * OperationDiv除法类 */public class OperationDiv extends Operation{@Overridepublic double getResult() throws Exception{if(getNumberB() == 0){throw new Exception("除数不能为0!");}return getNumberA() / getNumberB();}}


 

/** * OperationFactory运算工厂类 */public class OperationFactory {    public static Operation createOperate(String oper){Operation operation = null;//java7中已实现switch()变量类型为Stringswitch(oper){case "+":operation = new OperationAdd();break;case "-":operation = new OperationSub();break;case "*":operation = new OperationMul();break;case "/":operation = new OperationDiv();break;}return operation;}}


 

/** * 测试类 */public class Test {public static void main(String args[]){Operation operation = OperationFactory.createOperate("+");operation.setNumberA(15);operation.setNumberB(20);try {double result = operation.getResult();System.out.println("得到的结果是:" + result);} catch (Exception e) {e.printStackTrace();}}}