【设计模式】(一)工厂模式是什么?

以下内容仍在更新完善...

工厂模式是什么?

  要了解设计模式,首先了解什么是UML类图会有更大的帮助。

UML类图

【设计模式】(一)工厂模式是什么?

  图内“+”表示public,“-”表示private,“#”表示protected。

  继承关系:空心三角形+实线

  关联关系:实线箭头

  聚合关系:空心菱形+实线箭头

    聚合表示一种弱的"拥有"关系,体现的是A对象可以包含B对象,但是B对象不是A对象的一部分。

  合成(组合)关系:实心菱形+实线箭头

    合成(组合)表示一种强的"拥有"关系,体现的是整体与部分的关系,两者的生命周期一样。

  依赖关系:虚线箭头

  

工厂模式

  简单工厂模式UML类图(以简单计算器为例)

  【设计模式】(一)工厂模式是什么?

 具体实现代码示例:

 public class OperationFactory   //简单运算工厂类

{

  public static Operation createOperate(string operate)

  {

    Operation oper = NULL;
    switch (operate)
    {
      case "+":
        oper = new OperationAdd();
        break;
      case "-":
        oper = new OperationSub();
        break;
      case "*":
        ...
        break;
      case "/":
        ...
        break;
     }
      return oper;
  }

}

  工厂类负责判断需要具体实例化的对象。再交由继承了运算类的具体单一运算类进行计算。下面给出运算类和加法类的代码示例:

  

  public class Operation //Operation运算类

  {

  private:
    double _number1 = 0;
    double _number2 = 0;
  public:

    double Number1
    {
      get{ return _number1; }
      set{ _number1 = value; }
    }
    double Number2
    { ... }

    virtual double GetResult() //虚函数
    {
      double result = 0;
      return result;
    }
  }

  

  class OperationAdd : Operation //继承Operation类

  {

   public override double GetResult()  //重写
   {

     double result = 0;
     result = Number1 + Number2;
     return result;
    }
  }

  客户端代码示例如下:

Operation oper;
oper = OperationFactory.createOperate("+");
oper.Number1 = 1;
oper.Number2 = 2;
double result = oper.GetResult();