此为设计模式第六谈!
用总-分-总的结构和生活化的例子给你讲解设计模式!
码农不易,各位学者学到东西请点赞收藏支持支持!
开始部分:
总:抽象工厂模式主要解决的是创建一系列相关的对象,而无需指定这些对象的具体类。
分:
1.老规矩,在vs中创建一个控制台应用
2.实现编码,这里用了一个汽车制造厂的例子来讲解,根据不同的地区来生产不同类型的汽车和轮胎。
2.1 实现抽象产品类,定义汽车类和轮胎类
2.2 具体产品类:欧洲汽车类、欧洲轮胎类、美洲汽车类、美洲轮胎类
2.3 抽象工厂类:定义创建汽车和轮胎的接口
2.4 具体工厂类:实现具体的汽车和轮胎的创建
// 抽象汽车类
class AbstractCar {
public:
virtual void PrintName() = 0;
AbstractCar() { cout << "抽象汽车构造函数." << endl; }
virtual ~AbstractCar() { cout << "抽象汽车析构函数." << endl; }
};
// 抽象轮胎类
class AbstractTire {
public:
virtual void PrintName() = 0;
AbstractTire() { cout << "抽象轮胎构造函数." << endl; }
virtual ~AbstractTire() { cout << "抽象轮胎析构函数." << endl; }
};
// 欧洲汽车和轮胎
class EuroCar : public AbstractCar {
public:
void PrintName() override { cout << "欧洲汽车:奔驰." << endl; }
EuroCar() { cout << "欧洲汽车构造函数." << endl; }
~EuroCar() override { cout << "欧洲汽车析构函数." << endl; }
};
class EuroTire : public AbstractTire {
public:
void PrintName() override { cout << "欧洲轮胎:米其林." << endl; }
EuroTire() { cout << "欧洲轮胎构造函数." << endl; }
~EuroTire() { cout << "欧洲轮胎析构函数." << endl; }
};
// 美洲汽车和轮胎
class USCar : public AbstractCar {
public:
void PrintName() override { cout << "美洲汽车:福特." << endl; }
USCar() { cout << "美洲汽车构造函数." << endl; }
~USCar() override { cout << "美洲汽车析构函数." << endl; }
};
class USTire : public AbstractTire {
public:
void PrintName() override { cout << "美洲轮胎:固特异." << endl; }
USTire() { cout << "美洲轮胎构造函数." << endl; }
~USTire() { cout << "美洲轮胎析构函数." << endl; }
};
// 抽象汽车制造厂类
class AbstractCarFactory {
public:
virtual AbstractCar* CreateCar() = 0;
virtual AbstractTire* CreateTire() = 0;
AbstractCarFactory() { cout << "抽象汽车制造厂构造函数." << endl; }
virtual ~AbstractCarFactory() { cout << "抽象汽车制造厂析构函数." << endl; }
};
// 欧洲汽车制造厂
class EuroCarFactory : public AbstractCarFactory {
public:
AbstractCar* CreateCar() override { return new EuroCar; }
AbstractTire* CreateTire() override { return new EuroTire; }
EuroCarFactory() { cout << "欧洲汽车制造厂构造函数." << endl; }
~EuroCarFactory() { cout << "欧洲汽车制造厂析构函数." << endl; }
};
// 美洲汽车制造厂
class USCarFactory : public AbstractCarFactory {
public:
AbstractCar* CreateCar() override { return new USCar; }
AbstractTire* CreateTire() override { return new USTire; }
USCarFactory() { cout << "美洲汽车制造厂构造函数." << endl; }
~USCarFactory() { cout << "美洲汽车制造厂析构函数." << endl; }
};
int main() {
AbstractCarFactory* euroFactory = new EuroCarFactory;
AbstractCar* euroCar = euroFactory->CreateCar();
AbstractTire* euroTire = euroFactory->CreateTire();
euroCar->PrintName();
euroTire->PrintName();
delete euroTire; euroTire = nullptr;
delete euroCar; euroCar = nullptr;
delete euroFactory; euroFactory = nullptr;
AbstractCarFactory* usFactory = new USCarFactory;
AbstractCar* usCar = usFactory->CreateCar();
AbstractTire* usTire = usFactory->CreateTire();
usCar->PrintName();
usTire->PrintName();
delete usTire; usTire = nullptr;
delete usCar; usCar = nullptr;
delete usFactory; usFactory = nullptr;
return 0;
}


被折叠的 条评论
为什么被折叠?



