深入淺出設計模式原則之迪米特法則(LoD)

下面以“明星與經紀人的關係實例”爲例來說明迪米特法則原則的應用(工程源碼

分析:明星由於全身心投入藝術,所以許多日常事務由經紀人負責處理,如與粉絲的見面會,與媒體公司的業務洽淡等。這裏的經紀人是明星的朋友,而粉絲和媒體公司是陌生人,所以適合使用迪米特法則,其類圖如圖 1 所示。
 

明星與經紀人的關係圖
圖1 明星與經紀人的關係圖

#include <QCoreApplication>
#include <iostream>


/*!
 * \brief Star class
 */
class Star{
public:
    void SetName(std::string name){
        this->_star_name =name;
    }

    std::string GetName(void){
        return this->_star_name;
    }
private:
    std::string _star_name;
};

/*!
 * \brief The Fans class
 */
class Fans {
public:
    void SetName(std::string name){
        this->_fans_name = name;
    }
    std::string GetName(void){
        return this->_fans_name;
    }
private:
    std::string _fans_name;
};

/*!
 * \brief The Company class
 */
class Company{
public:
    void SetName(std::string name){
        this->_company_name = name;
    }

    std::string GetName(void){
        return this->_company_name;
    }
private:
    std::string _company_name;
};

/*!
 * \brief The Agent class
 */
class Agent{
public:
    void SetStar(Star &myStar){
        this->myStar = myStar;
    }

    void SetFans(Fans &myFans){
        this->myFans = myFans;
    }

    void SetCompany(Company &myCompany){
        this->myCompany = myCompany;
    }

    void Meeting(void){
        std::cout<< this->myStar.GetName()+" "+this->myFans.GetName() << std::endl;
    }

    void Business(void){
        std::cout<< this->myStar.GetName()+" "+this->myCompany.GetName() << std::endl;
    }
private:
    Star myStar;
    Fans myFans;
    Company myCompany;
};

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    Agent *myAgent = new Agent;
    Star myStar;
    myStar.SetName(std::string("Lili"));
    Fans myFans;
    myFans.SetName(std::string("mimi"));
    Company myCompany;
    myCompany.SetName(std::string("chuanmei"));
    myAgent->SetStar(myStar);
    myAgent->SetCompany(myCompany);
    myAgent->SetFans(myFans);
    myAgent->Meeting();
    myAgent->Business();
    return a.exec();
}

迪米特法則,又稱最少知道原則(Demeter Principle)

最少知道原則是指:一個實體應當儘量少地與其他實體之間發生相互作用,使得系統功能模塊相對獨立。

在運用迪米特法則時要注意以下 6 點。

  1. 在類的劃分上,應該創建弱耦合的類。類與類之間的耦合越弱,就越有利於實現可複用的目標。
  2. 在類的結構設計上,儘量降低類成員的訪問權限。
  3. 在類的設計上,優先考慮將一個類設置成不變類。
  4. 在對其他類的引用上,將引用其他對象的次數降到最低。
  5. 不暴露類的屬性成員,而應該提供相應的訪問器(set 和 get 方法)。
  6. 謹慎使用序列化(Serializable)功能。

參考:

  1. 迪米特法則——面向對象設計原則
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章