现在的位置: 首页 > 综合 > 正文

抽象工厂模式 (C++实现)

2018年04月30日 ⁄ 综合 ⁄ 共 2258字 ⁄ 字号 评论关闭

原文地址:

  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
<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:

 

抱歉!评论已关闭.