C++小技巧——空对象

先看以下C++代码:

CLanguageHandler* pLanHander = getLanguageHandler(iLanCode);
 if(NULL != pLanHander)
 {
     pLanHander->translate(strText);
 }
 else
 {
     cout<<"Do not support this language!"<<endl;
 }
CLanguageHandler* CToolManager::getLanguageHandler(int iLanCode)
{
    switch iLanCode
    {
        case LAN_CODE_CHN:
        {
            return m_pChnHandler;
        }

        case LAN_CODE_ENG:
        {
            return m_pEngHandler;
        }

        case LAN_CODE_JPN:
        {
            return m_pJpnHandler;
        }
        default:
        {
            return NULL;
        }
    }
}

其中m_pChnHandler,m_pEngHandler等是CLanguageHandler各个子类的指针。红色部分代码,由于getLanguageHandler()方法对于不支持的语言类型返回NULL,就有了这块判空逻辑。看到if...else总是让我们眉头一皱,能不能把这块逻辑去掉,让代码更简洁,更优雅些呢?我们可以使用空对象来解决哦!空对象就是使用一个空的类,来封装空操作或者错误处理,达到简化代码逻辑的目的,以下是使用空对象后的代码:

CLanguageHandler* pLanHander = getLanguageHandler(iLanCode);
pLanHander->translate(strText);
CLanguageHandler* CToolManager::getLanguageHandler(int iLanCode)
{
    switch iLanCode
    {
        case LAN_CODE_CHN:
        {
            return m_pChnHandler;
        }

        case LAN_CODE_ENG:
        {
            return m_pEngHandler;
        }

        case LAN_CODE_JPN:
        {
            return m_pJpnHandler;
        }
        default:
        {
            return m_pDefaultHandler;
        }
    }
}
void CDefaultHandler::translate(const std::string& strOrigText)
{
    cout<<"Do not support this language!"<<endl;
    return;
}

可以看到,没有了判空逻辑,程序更加清爽,默认处理也被巧妙封装到虚函数中。相比起23种设计模式来说,空对象只能算是一种小技巧,但是确实非常易学好用,可以和工厂、享元等设计模式结合起来使用,以减少代码中的坏味道。
原文链接: https://www.cnblogs.com/andrewli/archive/2013/04/07/3006104.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/83553

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 下午9:08
下一篇 2023年2月9日 下午9:09

相关推荐