工厂方法

2019-03-17  本文已影响0人  szn好色仙人

动机

定义

要点

示例

#include <cstdio>


//业务类的基类
class CBase
{
public:
    virtual ~CBase(){}
    virtual void Print() = 0;
};

//具体业务类0
class CChild0 : public CBase
{
public:
    virtual void Print() { printf("Type0\n"); }
};

//具体业务类1
class CChild1 : public CBase
{
public:
    virtual void Print() { printf("Type1\n"); }
};


//工厂基类
class CFactory
{
public:
    virtual ~CFactory() {}
    virtual CBase* Create() = 0;
};

//具体业务类0对应的工厂
class CFactoryType_0 : public CFactory
{
public:
    CBase* Create() { return new CChild0; }
};

//具体业务类1对应的工厂
class CFactoryType_1 : public CFactory
{
public:
    CBase* Create() { return new CChild1; }
};


//业务处理类
class CMakeCar
{
public:
    CMakeCar() : pFactory_(nullptr) {}

    void SetFactory(CFactory* pFactory) { this->pFactory_ = pFactory; }

    void Deal() 
    { 
        //工厂的核心就是对此处进行解耦
        auto p = pFactory_->Create();
        p->Print();
        delete p;  //随意写的delete
    }

private:
    CFactory* pFactory_;
};


int main()
{
    CFactoryType_0 FactoryChild0;
    CFactoryType_1 FactoryChild1;

    CMakeCar MakeCar;
    MakeCar.SetFactory(&FactoryChild0);
    MakeCar.Deal(); //输出Type0

    MakeCar.SetFactory(&FactoryChild1);
    MakeCar.Deal(); //输出Type1

    return 0;
}

https://www.bilibili.com/video/av24176315/?p=8

上一篇 下一篇

猜你喜欢

热点阅读