工厂模式其实不是太深奥,
简单工厂模式就是把实例化的工作封装到一个类中
例如,
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:
原文链接: https://www.cnblogs.com/Kelvinshere/archive/2013/03/06/2947022.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/79822
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!