抽象工厂模式 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: