抽象工厂模式 C++

工厂模式其实不是太深奥,

简单工厂模式就是把实例化的工作封装到一个类中

例如,

Class Product{

};

Class Factory{

public:

Product *pruduce(){

  return new Produce();

}

};

int main(){

Factory factory;

Product *product = factory.produce();

return 0;  

}

 

工厂方法和简单工厂的不同在于,用抽象吧produce函数封装起来,根据子类来调用各自不同的produce函数,生产不同的产品。

工厂方法是抽象工厂的特例,工厂方法中生产一个产品,而抽象工厂生产一系列相关的产品。

 

下面是一个例子,Monkey想要吃香蕉和苹果,香蕉苹果有中国产的,还有印度产的。Monkey跟住需求去找来自中国或者印度的农民,然后农民就会收获他们国家的香蕉和苹果给猴子。Kind of silly.

抽象工厂的代码:

 

//抽象工厂
#include <iostream>
using namespace std;

//////////////////////
class Apple{
public:
	virtual	void AppleSayHi() = 0;
};
class ChinaApple:public Apple{
public:
	void AppleSayHi(){
			cout<<"Hi~ I'm an Apple from China.n";
	}
};
class IndiaApple:public Apple{
public:
	void AppleSayHi(){
			cout<<"Hi~ I'm an Apple from India.n";
	}
};


class Banana{
	public:
	virtual	void BananaSayHi() = 0;
};
class ChinaBanana:public Banana{
	public:		
		void BananaSayHi(){
			cout<<"Hi~ I'm a Banana from China.n";
		}
};
class IndiaBanana:public Banana{
	public:		
		void BananaSayHi(){
			cout<<"Hi~ I'm a Banana from India.n";
		}
};

//////////////////////

class Farmer{
public:
	virtual Apple* harvestApple() = 0;	
	virtual Banana* harvestBanana() = 0;
};
class ChinaFarmer:public Farmer{
public:
	Apple* harvestApple(){ return  new ChinaApple();}
	Banana* harvestBanana(){return new ChinaBanana();}
};
class IndiaFarmer:public Farmer{
public:
	Apple* harvestApple(){return new IndiaApple();}
	Banana* harvestBanana(){return new IndiaBanana();}
};

//////////////////////

class Monkey{//又要买苹果又要买香蕉的客户
public:
	Apple *apple;
	Banana *banana;
	void SayHi(){
		cout<<"Some fruits in my stomach:n";
		apple->AppleSayHi();
		banana->BananaSayHi();
	}
	Monkey(string Country){
		Farmer *farmer;
		if (0 == Country.compare("China"))
		{	
			farmer = new ChinaFarmer();
		}
		else if (0 == Country.compare("India"))
		{
			farmer = new IndiaFarmer();
		}		
		apple = farmer->harvestApple();
		banana = farmer->harvestBanana();
	}
	

};
int main(){
	//测试
	Monkey monkey1("China");
	monkey1.SayHi();
	
	Monkey monkey2("India");
	monkey2.SayHi();

	getchar();
	return 0;
}

 Result:

 抽象工厂模式 C++

 

 

 

 

原文链接: https://www.cnblogs.com/Kelvinshere/archive/2013/03/06/2947022.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    抽象工厂模式 C++

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/79822

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 下午7:13
下一篇 2023年2月9日 下午7:14

相关推荐