1.工厂方法模式:
将工厂类调整一个工厂接口,需要什么类型的工厂就用该类型创建一个工厂,创建相应的产品。
举例说明:
一个汽车类工厂:该类提供了一个创建汽车类的一个接口,但是创建对象的实现是在其子类中实现的,及创建子类实现具体什么类型车的工厂,该工厂就生产什么类型的汽车。
工厂加工的产品是汽车,提供一个汽车类,该类具有所有汽车的共性,子类可以继承汽车的共性,同时也有其独特的特性。
Car.h
#ifndef CAR_H
#define CAR_H
class Car
{
public:
Car();
~Car();
};
#endif // CAR_H
car.cpp
#include "car.h"
Car::Car()
{
}
Car::~Car()
{
}
Car具有汽车的共性
AduiCar.h
#ifndef ADUICAR_H
#define ADUICAR_H
#include "car.h"
class AduiCar:public Car
{
public:
AduiCar();
};
#endif // ADUICAR_H
AduiCar.cpp
#include "aduicar.h"
#include <iostream>
using namespace std;
AduiCar::AduiCar()
{
cout<<"Adui Car"<<endl;
}
BydCar.h
#ifndef BYDCAR_H
#define BYDCAR_H
#include "car.h"
class BydCar:public Car
{
public:
BydCar();
};
#endif // BYDCAR_H
BydCar.cpp
#include "bydcar.h"
#include <iostream>
using namespace std;
BydCar::BydCar()
{
cout<<"Byd Car"<<endl;
}
Factory.h
#ifndef FACTROY_H
#define FACTROY_H
class Car;
class Factroy
{
public:
Factroy();
virtual Car*CreateCar()=0;
};
#endif // FACTROY_H
Factory.cpp
#include "factroy.h"
Factroy::Factroy()
{
}
#ifndef ADUICARFACTORY_H
#define ADUICARFACTORY_H
#include "factroy.h"
class AduiCarFactory:public Factroy
{
public:
AduiCarFactory();
Car*CreateCar();
};
#endif // ADUICARFACTORY_H
#include "aduicarfactory.h"
#include "aduicar.h"
AduiCarFactory::AduiCarFactory()
{
}
Car *AduiCarFactory::CreateCar()
{
return new AduiCar;
}
#ifndef BYDCARFACTORY_H
#define BYDCARFACTORY_H
#include "factroy.h"
class BydCarFactory:public Factroy
{
public:
BydCarFactory();
Car*CreateCar();
};
#endif // BYDCARFACTORY_H
#include "bydcarfactory.h"
#include "bydcar.h"
BydCarFactory::BydCarFactory()
{
}
Car *BydCarFactory::CreateCar()
{
return new BydCar;
}
工厂方法模式的本质就是继承和多态;