(1)可以使用工厂基类创建产品。
(2)可以使用工厂基类来调用子类实例化的方法,实现了多态。
cpp
#include<iostream>
#include<thread>
#include<string>
using namespace std;
//===========abstract product 抽象产品 =====
class Door{
public:
Door(){cout<<"door:构造函数被调用"<<endl;}
virtual ~Door()=default;
virtual void show()=0;
};
//=======concrete product 具体产品=========
class StoneDoor:public Door{
public:
StoneDoor(){cout<<"StoneDoor:构造函数被调用"<<endl;}
virtual ~StoneDoor()=default;
void show() override {cout<<"StoneDoor:show函数被调用"<<endl;}
};
//========factory 工厂基类===========
class Factory{
public:
Factory(){cout<<"Factroy:构造函数被调用"<<endl;}
virtual ~Factory()=default;
virtual Door* creat()=0;
virtual void DoSomething()=0;
};
//==========concrete Factory 具体产品===========
class StoneFactory:public Factory{
public:
StoneFactory(){cout<<"StoneFactroy:构造函数被调用"<<endl;}
virtual ~StoneFactory(){cout<<"StoneFfactory:析构函数被调用"<<endl;}
Door* creat() override{
return new StoneDoor;
}
void DoSomething() override{cout << "StoneFactory:dosomethng函数被调用"<<endl;}
};
//========client 连接函数=================
int main(int argv,char* argc[]){
Factory* factory= new StoneFactory;
Door* door = factory->creat();
factory->DoSomething();
delete factory;
delete door;
return 0;
}