#include <cstdio>
#include <stack>
#include <set>
#include <iostream>
#include <string>
#include <vector>
#include <queue>
#include <list>
#include <functional>
#include <cstring>
#include <algorithm>
#include <cctype>
#include <string>
#include <map>
#include <iomanip>
#include <cmath>
#include <time.h>
#define LL long long
using namespace std;
/*
抽象工厂模式和工厂方法模式:
1. 都有一个抽象的工厂基类,但前者的子类生产的是一个产品族,而后者的子类生产的是一个单一的产品。
2.前者有多个产品的抽象基类,而后者只有一个。
用处:当想提供一个产品库时,只想对外显示接口而不是实现细节。
关键代码:工厂抽象基类中定义创建不同类型产品的接口,子类实现接口,使每个具体产品类型对应一个接口;有多个抽象产品基类
缺点:新增产品族时很麻烦,需要修改工厂抽象基类,
*/
// 产品
class Mobile
{
public:
virtual void show()=0;
};
class LinuxMobile:public Mobile
{
public:
void show()
{
puts("------------this is a LinuxMoblie------------");
}
};
class WindowMobile:public Mobile
{
public:
void show()
{
puts("------------this is a WindowMoblie------------");
}
};
class PC
{
public:
virtual void show()=0;
};
class LinuxPC:public PC
{
public:
void show()
{
puts("**********It is a LinuxPC**********");
}
};
class WindowPC:public PC
{
public:
void show()
{
puts("**********It is a WindowPC**********");
}
};
// 工厂
class absFactory
{
public:
virtual PC* createPC()=0;
virtual Mobile* createMobile()=0;
};
class LinuxFactory:public absFactory
{
public:
LinuxFactory()
{
puts("create a Linux factory");
}
Mobile* createMobile()
{
puts("product a mobile of linux");
return new LinuxMobile;
}
PC* createPC()
{
puts("product a mobile of window");
return new LinuxPC;
}
};
class WindowFactory:public absFactory
{
public:
WindowFactory()
{
puts("create a Window factory");
}
Mobile* createMobile()
{
puts("product a mobile of Window");
return new WindowMobile;
}
PC* createPC()
{
puts("product a PC of window");
return new WindowPC;
}
};
int main()
{
absFactory *factory;
factory = new LinuxFactory;
Mobile *ml = factory->createMobile();
ml->show();
delete ml;
PC *pc = factory->createPC();
pc->show();
delete pc;
delete factory;
puts("+++++++++++++++++++++++++++++++++++++++");
factory = new WindowFactory();
ml = factory->createMobile();
ml->show();
delete ml;
pc = factory->createPC();
pc->show();
delete pc;
delete factory;
}
抽象工厂模式
最新推荐文章于 2024-04-25 09:25:45 发布