图解
抽象工厂针对的是产品族,而不是产品的等级结构
产品族:同一产地或同一厂商,功能不同
产品等级:功能相同,产地或者厂商不同
代码
#include <iostream>
using namespace std;
// 抽象苹果
class abstractApple {
public:
virtual void showName() = 0;
};
// 中国苹果
class chinaApple : public abstractApple {
public:
void showName() override {
cout << "中国苹果!" << endl;
}
};
// 日子苹果
class japApple : public abstractApple {
public:
void showName() override {
cout << "日子苹果!" << endl;
}
};
class abstractBanana {
public:
virtual void showName() = 0;
};
class chinaBanana : public abstractBanana {
public:
void showName() override {
cout << "中国香蕉!" << endl;
}
};
class japBanana : public abstractBanana {
public:
void showName() override {
cout << "日子香蕉!" << endl;
}
};
// 针对产品族
class abstractFactory {
public:
virtual abstractApple* CreateApple() = 0;
virtual abstractBanana* CreateBanana() = 0;
};
// 中国工厂
class chinaFactory : public abstractFactory {
public:
abstractApple* CreateApple() override {
return new chinaApple;
}
abstractBanana* CreateBanana() override {
return new chinaBanana;
}
};
// 日子工厂
class japFactory : public abstractFactory {
public:
abstractApple* CreateApple() override {
return new japApple;
}
abstractBanana* CreateBanana() override {
return new japBanana;
}
};
void test01() {
auto fac = new chinaFactory;
auto apple = fac -> CreateApple();
auto banana = fac -> CreateBanana();
apple->showName();
banana -> showName();
delete fac;
delete apple;
delete banana;
}
int main() {
test01();
return 0;
}