设计模式--简单工厂模式
从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。
?
实例:面向对象编程实现两个数的四则运算
?
运算父类:Operation.java
package factory;public abstract class Operation {public abstract double getResult();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;}protected double numberA = 0;protected double numberB = 0;}运算子类:OperationAdd.java
?
package factory;public class OperationAdd extends Operation {@Overridepublic double getResult() {// TODO Auto-generated method stubreturn numberA + numberB;}}?
运算子类:OperationSub.java
?
package factory;public class OperationSub extends Operation {@Overridepublic double getResult() {// TODO Auto-generated method stubreturn numberA - numberB;}}??
运算子类:OperationMul.java
?
package factory;public class OperationMul extends Operation {@Overridepublic double getResult() {// TODO Auto-generated method stubreturn numberA * numberB;}}??
运算子类:OperationDiv.java
?
package factory;public class OperationDiv extends Operation {@Overridepublic double getResult() {// TODO Auto-generated method stubdouble result = 0;try {result = numberA / numberB;} catch (ArithmeticException e) {System.out.println("除数不能为0");}return result;}}?工厂类:OperationFactory.java
?
package factory;public class OperationFactory {public static Operation createOperation(String operator) {Operation operation = null;if (operator.equals("+")) {operation = new OperationAdd();} else if (operator.equals("-")) {operation = new OperationSub();} else if (operator.equals("*")) {operation = new OperationMul();} else if (operator.equals("/")) {operation = new OperationDiv();}return operation;}}?Main函数
?
package factory;import java.util.Scanner;public class Main {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubScanner in = new Scanner(System.in);double numberA;double numberB;String operator;try {System.out.println("请输入数字A:");numberA = in.nextDouble();System.out.println("请输入运算符合(+、-、*、/):");operator = in.next();System.out.println("请输入数字B:");numberB = in.nextDouble();Operation operation = OperationFactory.createOperation(operator);operation.setNumberA(numberA);operation.setNumberB(numberB);System.out.println("结果是:" + operation.getResult());} catch (Exception e) {System.out.println("输入错误:" + e.getMessage());}}}