1.抽象工厂模式简介
抽象工厂是工厂方法的升级版,为相关或者相互依赖的对象提供一个接口,而且无效指定他们的具体实现类。
2.源码实现
#include <iostream>
using namespace std;
//抽象工厂模式
enum CarType {
BENZ,
BMW
};
//车类
class Car
{
public:
virtual void createdCar(void) = 0;
virtual ~Car(){};
};
//高配版车类
class HighCar
{
public:
virtual void createdCar(void) = 0;
virtual ~HighCar(){};
};
//奔驰车
class BenzCar : public Car
{
public:
BenzCar()
{
cout << "BenzCar::BenzCar()" << endl;
}
virtual void createdCar(void)
{
cout << "BenzCar::createdCar()" << endl;
}
~BenzCar()
{
cout << "BenzCar::~BenzCar()" << endl;
}
};
//宝马车
class BmwCar : public Car
{
public:
BmwCar()
{
cout << "BmwCar::BmwCar()" << endl;
}
virtual void createdCar(void)
{
cout << "BmwCar::createdCar()" << endl;
}
~BmwCar()
{
cout << "BmwCar::~BmwCar()" << endl;
}
};
//奔驰高配车
class HighBenzCar : public HighCar
{
public:
HighBenzCar()
{
cout << "HighBenzCar::HighBenzCar()" << endl;
}
virtual void createdCar(void)
{
cout << "HighBenzCar::createdCar()" << endl;
}
~HighBenzCar()
{
cout << "HighBenzCar::~HighBenzCar()" << endl;
}
};
//宝马高配车
class HighBmwCar : public HighCar
{
public:
HighBmwCar()
{
cout << "HighBmwCar::HighBmwCar()" << endl;
}
virtual void createdCar(void)
{
cout << "HighBmwCar::createdCar()" << endl;
}
~HighBmwCar()
{
cout << "HighBmwCar::~HighBmwCar()" << endl;
}
};
//车工厂
class CarFactory
{
public:
virtual Car *createSpecificCar(void) = 0;
virtual HighCar *createSpecificHighCar(void) = 0;
virtual ~CarFactory(){};
};
//奔驰车工厂
class BenzFactory : public CarFactory
{
public:
BenzFactory(){}
virtual Car *createSpecificCar(void)
{
return (new BenzCar());
}
virtual HighCar *createSpecificHighCar(void)
{
return (new HighBenzCar());
}
~BenzFactory()
{
cout << "BenzFactory::~BenzFactory()" << endl;
}
};
//宝马车工厂
class BmwFactory : public CarFactory
{
public:
BmwFactory() {}
virtual Car *createSpecificCar(void)
{
return (new BmwCar());
}
virtual HighCar *createSpecificHighCar(void)
{
return (new HighBmwCar());
}
~BmwFactory()
{
cout << "BmwFactory::~BmwFactory()" << endl;
}
};
int main()
{
CarFactory *benzfac = new BenzFactory();
CarFactory *bmwfac = new BmwFactory();
Car *CardA = benzfac->createSpecificCar();
Car *CardB = bmwfac->createSpecificCar();
HighCar *CardC = benzfac->createSpecificHighCar();
HighCar *CardD = bmwfac->createSpecificHighCar();
delete CardA;
delete CardB;
delete CardC;
delete CardD;
delete benzfac;
delete bmwfac;
return 0;
}
3.编译源码
$ g++ -o example example.cpp
4.运行及其结果
$ ./example
BenzCar::BenzCar()
BmwCar::BmwCar()
HighBenzCar::HighBenzCar()
HighBmwCar::HighBmwCar()
BenzCar::~BenzCar()
BmwCar::~BmwCar()
HighBenzCar::~HighBenzCar()
HighBmwCar::~HighBmwCar()
BenzFactory::~BenzFactory()
BmwFactory::~BmwFactory()
网友评论