设计模式之抽象工厂模式(AbstructFactory)

抽象工厂模式(AbstructFactory)

优点:

1.可以支持不同类型的产品,使得产品的灵活性更强

2.可以很方便的一族中间的不同类型的产品

缺点:

结构过于臃肿,如果产品类型过大,就会难以管理


代码实现:

AbstructFactory.h

#ifndef ABSTRUCTFACTORY_H
#define ABSTRUCTFACTORY_H

/*ProductA*/
class AbstructProductBaseA
{
public:
    AbstructProductBaseA(){}
    ~AbstructProductBaseA(){}
    virtual void show();
};

class ProductA : public AbstructProductBaseA
{
public:
    ProductA(){}
    ~ProductA(){}
    void show();
};

class ProductB : public AbstructProductBaseA
{
public:
    ProductB(){}
    ~ProductB(){}
    void show();
};


/*ProductAA*/
class AbstructProductBaseAA
{
public:
    AbstructProductBaseAA(){}
    ~AbstructProductBaseAA(){}
    virtual void show();
};

class ProductAA : public AbstructProductBaseAA
{
public:
    ProductAA(){}
    ~ProductAA(){}
    void show();
};

class ProductBB : public AbstructProductBaseAA
{
public:
    ProductBB(){}
    ~ProductBB(){}
    void show();
};


/*Factory*/
class AbstructFactory
{
public:
    AbstructFactory(){}
    ~AbstructFactory(){}
    virtual AbstructProductBaseA *createProductA() = 0;
    virtual AbstructProductBaseAA *createProductAA() = 0;
};

class FactoryA : public AbstructFactory
{
public:
    FactoryA(){}
    ~FactoryA(){}
    AbstructProductBaseA *createProductA();
    AbstructProductBaseAA *createProductAA();
};

class FactoryB : public AbstructFactory
{
public:
    FactoryB(){}
    ~FactoryB(){}
    AbstructProductBaseA *createProductA();
    AbstructProductBaseAA *createProductAA();
};

#endif // ABSTRUCTFACTORY_H


AbstructFactory.cpp

#include "abstructfactory.h"

#include <iostream>

void AbstructProductBaseA::show()
{
    std::cout << "this is AbstructProductBaseA" << std::endl;
}

void ProductA::show()
{
    std::cout << "this is ProductA" << std::endl;
}

void ProductB::show()
{
    std::cout << "this is ProductB" << std::endl;
}


void AbstructProductBaseAA::show()
{
    std::cout << "this is AbstructProductBaseAA" << std::endl;
}

void ProductAA::show()
{
    std::cout << "this is ProductAA" << std::endl;
}

void ProductBB::show()
{
    std::cout << "this is ProductBB" << std::endl;
}


AbstructProductBaseA *FactoryA::createProductA()
{
    return new ProductA;
}

AbstructProductBaseAA *FactoryA::createProductAA()
{
    return new ProductAA;
}


AbstructProductBaseA *FactoryB::createProductA()
{
    return new ProductB;
}

AbstructProductBaseAA *FactoryB::createProductAA()
{
    return new ProductBB;
}


main.cpp

#include <iostream>

#include "abstructfactory.h"

int main()
{
    AbstructFactory *factory = new FactoryA;
    factory->createProductA()->show();
    factory->createProductAA()->show();

    factory = new FactoryB;
    factory->createProductA()->show();
    factory->createProductAA()->show();

    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值