原文地址:
http://www.cnblogs.com/Kelvinshere/archive/2013/03/06/2947022.html
工厂模式其实不是太深奥,
简单工厂模式就是把实例化的工作封装到一个类中
例如,
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 using namespace std; ////////////////////// class Apple{ public : virtual void AppleSayHi() }; class ChinaApple: public Apple{ public : void AppleSayHi(){ cout<< "Hi~ ; } }; class IndiaApple: public Apple{ public : void AppleSayHi(){ cout<< "Hi~ ; } }; class Banana{ public : virtual void BananaSayHi() }; class ChinaBanana: public Banana{ public : void BananaSayHi(){ cout<< "Hi~ ; } }; class IndiaBanana: public Banana{ public : void BananaSayHi(){ cout<< "Hi~ ; } }; ////////////////////// class Farmer{ public : virtual Apple* virtual Banana* }; class ChinaFarmer: public Farmer{ public : Apple* return new ChinaApple();} Banana* return new ChinaBanana();} }; class IndiaFarmer: public Farmer{ public : Apple* return new IndiaApple();} Banana* return new IndiaBanana();} }; ////////////////////// class Monkey{ //又要买苹果又要买香蕉的客户 public : Apple Banana void SayHi(){ cout<< "Some ; apple->AppleSayHi(); banana->BananaSayHi(); } Monkey(string Farmer if (0 "China" )) { farmer new ChinaFarmer(); } else if (0 "India" )) { farmer new IndiaFarmer(); } apple banana } }; int main(){ //测试 Monkey "China" ); monkey1.SayHi(); Monkey "India" ); monkey2.SayHi(); getchar (); return 0; } |
Result: