简单工厂模式

题目:
实现一个简单的计算器应用程序。
功能要求:
1) 只需要实现+、-、*、、/四种运算;
2) 程序运行时,输入两个数和运算符号,即可得到运算结果。

程序:可复用、可维护、可拓展、灵活性好

简单工厂模式的优点
1)将对象的创建和对象本身业务处理分离可以降低系统的耦合度,使得两者修改起来都相对容易;
2)在调用工厂类的工厂方法时,由于工厂方法是静态方法,使用起来很方便,可通过类名直接调用,而且只需要传入一个简单的参数即可;对于一些复杂的类名,通过简单工厂模式可以减少使用者的记忆量;
3)通过引入配置文件,可以在不修改任何客户端代码的情况下更换和增加新的具体产品类,在一定程度上提高了系统的灵活性。

简单工厂模式的缺点
1)由于工厂类集中了所有产品创建逻辑,一旦不能正常工作,整个系统都要受到影响。
2) 使用简单工厂模式将会增加系统中类的个数,在一定程序上增加了系统的复杂度和理解难度。
3)系统扩展困难,一旦添加新产品就不得不修改工厂逻辑,在产品类型较多时,有可能造成工厂逻辑过于复杂,不利于系统的扩展和维护。

适用环境:适用于工厂类创建的对象少且客户端对传入工程类参数不关心的情况下。

例子目录结构如图所示:
简单工厂模式
Operation

public class Operation {
  private double _numberA=0.0;
  private double _numberB=0.0;
  
  public void set_numberA(double _numberA) {
    this._numberA = _numberA;
  }

  public void set_numberB(double _numberB) {
    this._numberB = _numberB;
  }

  public double get_numberA() {
    return _numberA;
  }

  public double get_numberB() {
    return _numberB;
  }
  public  double GetResult(){
    double result=0.0;
    return result;
  }
}

OperationAdd,另外OperationSub等三种运算代码与其相似。

public class OperationAdd extends Operation{
  public double GetResult() {
    double result=0.0;
    result=this.get_numberA()+this.get_numberB();
    return result;
  }
}

OperationFactory

public class OperationFactory {
  public static Operation createOperation(String operate) {
    Operation oper = null;
    switch (operate) {
      case "+":
        oper = new OperationAdd();
        break;
      case "-":
        oper = new OperationSub();
        break;

      case "*":
        oper = new OperationMul();
        break;

      case "/":
        oper = new OperationDiv();
        break;

    }
    return oper;
  }
}

Test相当于客户端

public class Test {
  public static void main(String[] args) {
    try
    {
      Scanner input =new Scanner(System.in);
      System.out.print("请输入数字A: ");
      String strNumberA = input.nextLine();
      System.out.print("请选择运算符号(+、-、*、/): ");
      String strOperate = input.nextLine();
      System.out.print("请输入数字B: ");
      String strNumberB = input.nextLine();
      double result;
      Operation oper;
      oper= OperationFactory.createOperation(strOperate);
      oper.set_numberA(Double.valueOf(strNumberA));
      oper.set_numberB(Double.valueOf(strNumberB));
      result=oper.GetResult();

      System.out.println("结果是" + result);
    }
    catch (Exception e)
    {
      System.out.println("除数不能为零");
    }
  }

}

在写程序报错时看一下上面有没有导入了包,而没有使用package下的自己写的类。
UML如图所示:
简单工厂模式

上一篇:【C语言】北邮国院大一下期末复习


下一篇:数据结构阶段二(1)