抽象工厂模式(c++)

#include<iostream>
using namespace std;

//苹果抽象类
class AbstractApple {
public:
	virtual void ShowName() = 0;
};
//中国苹果
class ChinaApple :public AbstractApple {
public:
	void ShowName() override{
		cout << "中国苹果" << endl;
	}
};
class USAApple :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 USABanana :public AbstractBanana {
public:
	void ShowName() override {
		cout << "美国香蕉" << endl;
	}
};
//抽象鸭梨
class AbstractPear {
public:
	virtual void ShowName() = 0;
};
class ChinaPear :public AbstractPear {
public:
	void ShowName() override {
		cout << "中国鸭梨" << endl;
	}
};
class USAPear :public AbstractPear {
public:
	void ShowName() override {
		cout << "美国鸭梨" << endl;
	}
};

//抽象工厂 针对产品族
class AbstractFactory {
public:
	virtual AbstractApple* CreateApple() = 0;
	virtual AbstractBanana* CreateBanana() = 0;
	virtual AbstractPear* CreatePear() = 0;
};
class ChinaFactory :public AbstractFactory {
public:
	virtual AbstractApple* CreateApple() {
		return new ChinaApple;
	}
	virtual AbstractBanana* CreateBanana() {
		return new ChinaBanana;
	}
	virtual AbstractPear* CreatePear() {
		return new ChinaPear;
	}
};
class USAFactory :public AbstractFactory {
public:
	virtual AbstractApple* CreateApple() {
		return new USAApple;
	}
	virtual AbstractBanana* CreateBanana() {
		return new USABanana;
	}
	virtual AbstractPear* CreatePear() {
		return new USAPear;
	}
};
void test() {
	AbstractFactory* factory;
	AbstractApple* apple;
	AbstractBanana* banana;
	AbstractPear* Pear;

	factory = new ChinaFactory;
	apple = factory->CreateApple();
	apple->ShowName();
	banana = factory->CreateBanana();
	banana->ShowName();
	Pear = factory->CreatePear();
	Pear->ShowName();

	delete factory;
	delete apple;
	delete banana;
	delete Pear;
}
int main() {
	test();

	cin.get();
	return 0;
}

  

posted @ 2024-03-25 17:47  dmfsimle  阅读(5)  评论(0编辑  收藏  举报