意图:创建一系列相关或者相互依赖对象的接口,而无序指定具体的类(多态的技术)
使用场景:1.系统独立它的产品。
2.一系列相关产品的设计。
3.系统要由多个产品系列中的一个来配置时。
4.封装对象的创建(提供产品类库 突出接口而不是实现)。
我觉得就是一句话:相当于系统是一个抽象模板,产品照着它实现,但是要保密对象的创建。
代码示例:
#define _CRT_SECURD_NO_WARNINGS 1
#include<iostream>
using namespace std;
//抽象工厂
class phone {
public:
virtual void showname() = 0;
};//手机抽象
class vivophone :public phone {
public:
virtual void showname() {
cout << "vivo手机就是牛" << endl;
}
};
class oppophone :public phone {
public:
virtual void showname() {
cout << "oppo手机就是牛" << endl;
}
};
class pad {
public:
virtual void showname() = 0;
};//平板的抽象
class vivopad :public pad{
public:
virtual void showname() {
cout << "vivo平板" << endl;
}
};
class oppopad :public pad {
public:
virtual void showname() {
cout << "oppo平板" << endl;
}
};
//--------------------------------------------------------
//以上相当于是提供的产品类库
class abstractfactory {
public:
virtual phone* creatphone() = 0;
virtual pad* creatpad() = 0; //函数类型是针对产品类,实现它们的创建方式
};//抽象工厂
class vivofactory:public abstractfactory {
public:
virtual phone* creatphone() {
return new vivophone;
}
virtual pad* creatpad() {
return new vivopad;
}
};//vivo工厂
class oppofactory:public abstractfactory {
public:
virtual phone* creatphone() {
return new oppophone;
}
virtual pad* creatpad() {
return new oppopad;
}
};//oppo工厂
void test01(){
abstractfactory* factory; //创建的父类对象
phone* phone;
pad* pad;
//vivo工厂
factory = new vivofactory(); //多态
pad=factory->creatpad();
phone = factory->creatphone();
delete pad;
delete phone;
delete factory;
}
int main() {
test01();
}