深入浅出设计模式原则之迪米特法则(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. 迪米特法则——面向对象设计原则
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章