天天看點

C++ 簡單工廠(靜态工廠方法)

#include <iostream>
#include <windows.h>
using namespace std;

enum E_CAR_TYPE
{
  E_CAR_TYPE_BENZ = 1, // 奔馳
  E_CAR_TYPE_BMW = 2, // 寶馬
};

class Car
{
public:
  virtual void CreateCar(void) = 0;
};

class BenzCar :public Car // 奔馳車
{
public:
  BenzCar()
  {
    cout <<"BenzCar::Benz()" << endl;
  }
  virtual void CreateCar(void)
  {
    cout <<"BenzCar::CreateBenz Car" << endl;
  }

  ~BenzCar()
  {

  }
};

class BmwCar :public Car // 寶馬車
{
public:
  BmwCar()
  {
    cout <<"BmwCar:Car" << endl;
  }
  virtual void CreateCar(void)
  {
    cout << "BmwCar::CreateBmw Car" << endl;
  }
};

class Facory
{
public:
  Car *CreateSpecifiCar(E_CAR_TYPE eType)
  {
    Car *pCar = NULL;
    switch(eType)
    {
      case E_CAR_TYPE_BENZ: // 奔馳
        {
          pCar = new BenzCar();
        }
        break;
      case E_CAR_TYPE_BMW:  // 寶馬
        {
          pCar = new BmwCar();
        }
        break;
      default:
        break;
    }

    return pCar;
  }
};

int main()
{
  Facory mFactory;
  Car* mpCarOne = mFactory.CreateSpecifiCar(E_CAR_TYPE_BENZ);
  Car* mpCarTwo = mFactory.CreateSpecifiCar(E_CAR_TYPE_BMW);

  mpCarOne->CreateCar();
  mpCarTwo->CreateCar();

  delete mpCarOne;
  delete mpCarTwo;

  system("pause");
  return 0;
}