接口隔离

踏踏实实做事

导航

抽象工厂模式

工厂模式  //一个系列的不同产品

#include <iostream>
#include <string>

using namespace std;

class IBody                            //说话接口类
{
public:
    virtual void speak() = 0;
};

class IFactory                        //人口工厂
{
public:
    virtual IBody * createBody(int iType) = 0;
};

class Chinese: public IBody            //中国人
{
public:
    virtual void speak()
    {
        printf("speak in 中国话\n");
    }
};

class English: public IBody            //英国人
{
public:
    virtual void speak()
    {
        printf("speak in 英语\n");
    }
};

class Factory: public IFactory        //工厂实现
{
public:
    IBody * createBody(int iType)
    {
        IBody * pBody= NULL;
        switch (iType)
        {
        case 0:
            pBody = new Chinese();
            break;
        case 1:
            pBody = new English();
            break;
        default:
            break;
        }
        return pBody;
    }
};

void main()
{
    IFactory * pFac = new Factory();
    IBody * pBody = pFac->createBody(0);
    pBody->speak();

    IBody * pEng = pFac->createBody(1);
    pEng->speak();
}

//抽象工厂模式

class IBody                            //说话接口类
{
public:
    virtual void speak() = 0;
};

class IAnimal                        //动物接口
{
public:
    virtual void say() = 0;
};

class IFactory                        //人口工厂
{
public:
    virtual IBody * createBody(int iType) = 0;
    virtual IAnimal * createAnimal(int iType) = 0;
};

class Chinese: public IBody            //中国人
{
public:
    virtual void speak()
    {
        printf("speak in 中国话\n");
    }
};
class English: public IBody            //英国人
{
public:
    virtual void speak()
    {
        printf("speak in 英语\n");
    }
};

class Pig :public IAnimal
{
public:
    void say()
    {
        printf("这是个猪\n");
    }
};

class Factory: public IFactory        //工厂实现
{
public:
    IBody * createBody(int iType)
    {
        IBody * pBody= NULL;
        switch (iType)
        {
        case 0:
            pBody = new Chinese();
            break;
        case 1:
            pBody = new English();
            break;
        default:
            break;
        }
        return pBody;
    }

    IAnimal * createAnimal(int iType)
    {
        IAnimal * pAni = NULL;
        pAni = new Pig();
        return pAni;
    }
};
void main()
{
    IFactory * pFac = new Factory();
    pFac->createBody(0)->speak();
    pFac->createBody(1)->speak();
    pFac->createAnimal(0)->say();
}

posted on 2016-10-27 11:40  接口隔离  阅读(84)  评论(0编辑  收藏  举报