下面以“明星与经纪人的关系实例”为例来说明迪米特法则原则的应用(工程源码)

分析:明星由于全身心投入艺术,所以许多日常事务由经纪人负责处理,如与粉丝的见面会,与媒体公司的业务洽淡等。这里的经纪人是明星的朋友,而粉丝和媒体公司是陌生人,所以适合使用迪米特法则,其类图如图 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. 迪米特法则——面向对象设计原则

深入浅出设计模式原则之迪米特法则(LoD)相关推荐

  1. 设计模式原则之迪米特法则

    设计模式原则之迪米特法则 迪米特法则(Law of Demeter, LoD)的核心是一个软件实体应当尽可能少地与其他实体发生相互作用. 如果一个系统符合迪米特法则,那么当其中某一个模块发生修改时,就 ...

  2. 设计原则 单一职责原则、开放封闭原则、依赖倒置原则、里氏代换原则、迪米特法则

    目录 1 单一职责原则 2 开放封闭原则 3 依赖倒置原则 4 里氏代换原则 5 迪米特法则 1 单一职责原则 比如:电脑内存坏了就应该更换内存,不应该更换CPU (内存负责内存.CPU负责CPU) ...

  3. 围观设计模式(5)--迪米特法则(Lod,Law of Demeter)或最少知道原则(Least Knowledge Principle)

    得墨忒耳(迪米特)定律(Law of Demeter,缩写LoD)亦称为"最少知识原则(Principle of Least Knowledge)",是一种软件开发的设计指导原则, ...

  4. 设计模式之美——DRY原则 和 迪米特法则

    DRY原则 Don't Repeat Yourself.中文直译为:不要重复自己.即,不要写重复的代码. 我们主要讲三种典型的代码重复情况:实现逻辑重复.功能语义重复和代码执行重复. 实现逻辑重复 p ...

  5. 设计模式:设计模式七大原则之迪米特法则

    迪米特法则的核心是降低类之间的耦合 , 最少知道原则 import java.util.ArrayList; import java.util.List;public class Demeter1 { ...

  6. 设计模式系列之七大原则之——迪米特法则

    ①一个对象应该对其他对象保持最少的了解 ②类与类关系越密切,耦合度越大 ③迪米特法则又叫最少知道原则,即一个类对自己依赖的类知道的越少越好(对于一类被依赖的类,不管是多么复杂,对外只提供方法即可,不去 ...

  7. 设计模式六大原则5---》迪米特法则

    定义:一个对象应该对其他对象保持最少的了解. 问题由来:类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大. 解决方案:尽量降低类与类之间的耦合. 自从我们接触编程开始,就 ...

  8. java设计模式(7):软件设计原则之迪米特法则

    迪米特法则又叫最少知识原则. 只和你的直接朋友交谈,不跟"陌生人"说话(Talk only to your immediate friends and not to strange ...

  9. 设计原则之六——迪米特法则

    以下七种设计原则是软件设计模式尽量遵循的原则,各种原则要求的侧重点不同. 开闭原则 是总纲,它告诉我们要对扩展开放,对修改关闭: 里氏替换原则 告诉我们不要破坏继承体系: 依赖倒置原则 告诉我们要面向 ...

最新文章

  1. Gartner 发布《2017 年新兴技术成熟度曲线图》
  2. 哀悼!华人著名计算机科学家刘炯朗逝世,图灵奖得主姚期智为其得意门生
  3. redis list操作
  4. ACM模板--链接表 有向图
  5. cad绘制椭圆的方法有几种_CAD新手入门教学:如何绘制矩形?
  6. 北斗导航 | 北斗RDSS短报文通信及定位原理(RD双星定位、通信与授时、附代码)
  7. java 对象 转为繁体_Java实现将数字转化为繁体汉字表示
  8. oracle unpivot 空值,sql – 处理UNPIVOT中的NULL值
  9. Vue3 Composition API(三)——生命周期钩子、Provide函数 和 Inject函数、封装Hook案例、setup顶层编写方式
  10. 聊聊人工智能训练师AIT(Artificial Intelligence Trainer)
  11. python dataframe索引转成列_如何将 Pandas DataFrame 的索引转换为列
  12. 中文命名实体识别,HMM,CRF,BiLSTM,BiLSTM+CRF的具体实现
  13. DevExtreme移动开发框架
  14. Windows下SVN已检出项目自动更新
  15. oracle数据库服务器名称修改,oracle数据库服务器名称修改
  16. redis的hset hget mset mget是什么
  17. android密码设成星号,将EditText密码掩码字符更改为星号(*)
  18. 【jieba获取关键词】
  19. DM8数据库的归档配置,开启归档,关闭归档
  20. 【每日一题2019-11-14】-蓝桥杯 prev37 分巧克力

热门文章

  1. wxWidgets:在带有 DC 的面板上绘图
  2. wxWidgets:滚动窗口
  3. wxWidgets:在 Unix (GTK+) 下打印
  4. boost::merge相关的测试程序
  5. boost::geometry::centroid用法的测试程序
  6. GDCM:二个DICOM文件的diff差异的测试程序
  7. Boost:python与宏BOOST_TEST_EQ相关的实例
  8. ITK:Watch注册Registration
  9. ITK:遍历具有成形邻域的图像区域
  10. VTK:可视化之BillboardTextActor3D