工厂模式其实不是太深奥,
简单工厂模式就是把实例化的工作封装到一个类中
例如,
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: