设计模式--工厂模式

还是以计算器为例

首先定义Operation接口和Add,Sub,Mul,Div操作

public interface Operation {
  public double getResult(double a, double b);
}

public class Add implements Operation {

  @Override
  public double getResult(double a, double b) {
    return a + b;
  }

}

public class Sub implements Operation {

  @Override
  public double getResult(double a, double b) {
    return a - b;
  }

}

public class Mul implements Operation {

  @Override
  public double getResult(double a, double b) {
    return a * b;
  }

}

public class Div implements Operation {

  @Override
  public double getResult(double a, double b) {
    if (b == 0) {
      throw new IllegalArgumentException("除数不能为0!");
    }
    return a / b;
  }

}

接下来创建抽象工厂

public abstract class AbstractOperationFactory {
  public abstract Operation createOperation(String op);
}

创建工厂实现类

public class OperationFactory extends AbstractOperationFactory {

  @Override
  public Operation createOperation(String op) {
    Operation operation = null;
    switch (op) {
      case "+":
        operation = new Add();
        break;
      case "-":
        operation = new Sub();
        break;
      case "*":
        operation = new Mul();
        break;
      case "/":
        operation = new Div();
        break;
      default:
        break;
    }
    return operation;
  }

  public static void main(String args[]) {
    AbstractOperationFactory operationFactory = new OperationFactory();
    System.out.println(operationFactory.createOperation("+").getResult(1, 2));
    System.out.println(operationFactory.createOperation("-").getResult(1, 2));
    System.out.println(operationFactory.createOperation("*").getResult(1, 2));
    System.out.println(operationFactory.createOperation("/").getResult(1, 2));
    // 除数为0
    System.out.println(operationFactory.createOperation("/").getResult(1, 0));
  }
}

枚举工厂

public enum OperationEnmuFactory {
  ADD, MUL, DIV, SUB;
  public Operation createOperation() {
    Operation operation = null;
    switch (this) {
      case ADD:
        operation = new Add();
        break;
      case MUL:
        operation = new Mul();
        break;
      case DIV:
        operation = new Div();
        break;
      case SUB:
        operation = new Sub();
        break;
      default:
        break;
    }
    return operation;
  }

  public static void main(String args[]) {
    Operation add = OperationEnmuFactory.ADD.createOperation();
    System.out.println(add.getResult(1, 2));
    Operation mul = OperationEnmuFactory.MUL.createOperation();
    System.out.println(mul.getResult(1, 2));
    Operation sub = OperationEnmuFactory.SUB.createOperation();
    System.out.println(sub.getResult(1, 2));
    Operation div = OperationEnmuFactory.DIV.createOperation();
    System.out.println(div.getResult(1, 2));
    // 除数为0测试
    System.out.println(div.getResult(1, 0));
  }
}

 

posted @ 2019-10-11 22:50  lz_0011  阅读(94)  评论(0编辑  收藏  举报