设计模式工厂方法(FactoryMethod)

来源:互联网 发布:鸿运抽奖软件注册码 编辑:程序博客网 时间:2024/05/16 06:06

工厂方法:

优点:

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

缺点:

与简单工厂差不多


代码实现:

FactoryMethod.h

#ifndef FACTORYMETHOD_H#define FACTORYMETHOD_Hnamespace 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 0
原创粉丝点击