策略模式

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

动机

定义

要点

坏示例

//某种类型的枚举
enum EType
{
    eType_0,
    eType_1,
    eType_2
};

//对不同的类型进行处理
class CTest0
{
public:
    //若新增了类型,则此函数无法维持稳定
    void Deal(const EType eTypeC)
    {
        if (eType_0 == eTypeC)
        {
            //...
        }
        else if (eType_1 == eTypeC)
        {
            //...
        }
        else if (eType_2 == eTypeC)
        {
            //...
        }
    }
};

策略模式示例

//定义一个类型基类
class CBaseType
{
public:
    virtual ~CBaseType(){}
    virtual void Deal() = 0;
};

//具体类型
class CType0 : public CBaseType
{
public:
    virtual void Deal()
    {
        //...
    }
};

//具体类型
class CType1 : public CBaseType
{
public:
    virtual void Deal()
    {
        //...
    }
};

class CTest1
{
public:
    //即使新增了具体类型,此函数仍然稳定
    void Deal(CBaseType* pType)
    {
        pType->Deal();
    }
};

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

上一篇下一篇

猜你喜欢

热点阅读