设计模式工厂方法(FactoryMethod)

工厂方法:

优点:

基本与简单工厂一致,但是遵循封闭-开放原则,灵活性更强

缺点:

与简单工厂差不多


代码实现:

FactoryMethod.h

#ifndef FACTORYMETHOD_H
#define FACTORYMETHOD_H

namespace FactoryMethod {

/*Product*/
class AbstrcutBase
{
public:
    AbstrcutBase(){}
    ~AbstrcutBase(){}
    virtual void show();
};

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

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

/*Factory*/
class FactoryBase
{
public:
    FactoryBase(){}
    ~FactoryBase(){}
    virtual AbstrcutBase *createFactory();
};

class FactoryA : public FactoryBase
{
public:
    FactoryA(){}
    ~FactoryA(){}
    AbstrcutBase *createFactory();
};

class FactoryB : public FactoryBase
{
public:
    FactoryB(){}
    ~FactoryB(){}
    AbstrcutBase *createFactory();
};
}

#endif // FACTORYMETHOD_H


FactoryMethod.cpp

#include "factorymethod.h"

#include <iostream>

void FactoryMethod::AbstrcutBase::show()
{
    std::cout << "this is AbstructBase" <<std::endl;
}

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

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

FactoryMethod::AbstrcutBase *FactoryMethod::FactoryBase::createFactory()
{
    std::cout << "this is AbstructFactoryBase" <<std::endl;
    return new AbstrcutBase;
}

FactoryMethod::AbstrcutBase *FactoryMethod::FactoryA::createFactory()
{
    std::cout << "this is FactoryA" <<std::endl;
    return new ProductA;
}

FactoryMethod::AbstrcutBase *FactoryMethod::FactoryB::createFactory()
{
    std::cout << "this is FactoryB" <<std::endl;
    return new ProductB;
}


main.cpp

#include <iostream>
#include "factorymethod.h"

int main()
{
    FactoryMethod::FactoryBase *factory = new FactoryMethod::FactoryBase;
    factory->createFactory()->show();


    factory = new FactoryMethod::FactoryA;
    factory->createFactory()->show();

    factory = new FactoryMethod::FactoryB;
    factory->createFactory()->show();

    return 0;
}<strong>
</strong>


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值