码迷,mamicode.com
首页 > 其他好文 > 详细

第2章 面向对象的设计原则(SOLID):5_迪米特法则

时间:2016-05-10 16:46:34      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:

5. 迪米特法则(Law of Demeter,LoD)

5.1 定义

(1)应尽量减少其他对象之间的交互,对象只和自己的朋友交谈,即对其他依赖的类越少越好(不要和太多的类发生关系)。

(2)尽量不要让类和类之间建立直接的关系,这样可减少类与类之间的依赖,降低类之间的耦合。

(3)一个类应对自己需要耦合的类知道得最少,只知道其public方法,其内部如何复杂自己没有关系,也叫最少知识原则(Least Knowledge Principle,LKP)。

5.2 迪米特法则:核心要义就是类间解耦、低耦合

(1)只和直接朋友交流

  ①直接朋友的定义:出现在成员变量、方法的输入参数和返回值的类称为朋友类

  ②非朋友:出现在方法体内部的类

【编程实验】体育委员点名

//违反LoD的设计

//面向对象设计原则:LoD迪米特法则
//类间解耦

#include <stdio.h>
#include <list>
using namespace std;

//Girl类
class Girl
{
    
};

class GroupLeader
{
public:
    //清点女生数量 
    void countGirls(list<Girl>& list)
    {
        printf("Numbers of Girls: %d\n", list.size());
    }    
};

//Teacher类
class Teacher
{
public:
    //老师叫体育委员清点一下女生人数
    void command(GroupLeader& groupLeader)
    {
        //方法内的类,与Teacher不是朋友关系,
        //但这样的设计会使Teacher对Girl类产生依赖,违反Lod法则
        list<Girl> listGirls;
        
        //初始化女生
        for(int i = 0; i< 20; i++)
        {
            Girl g;
            listGirls.push_back(g);//会复制一份过去
        }
        
        groupLeader.countGirls(listGirls);
    }
};

int main()
{
    Teacher teacher;
    GroupLeader groupLeader;
    
    //老师发布命令
    teacher.command(groupLeader);
    
    return 0;
}

//遵循LoD法则的设计

(2)朋友间也是有距离的

 

(3)是自己的就是自己的

  当某个方法放在本类可以,放在其他类也没错,那么根据迪米特法则,可以在不增加类间的关系,也不对本类产生负面影响,就放置在本类中

 

5.3 最佳实践

(1)迪米特法则的核心观念就是类间解耦、弱耦合

(2)解耦是有限度的,在实际的项目中,需要适度考虑这个原则。

第2章 面向对象的设计原则(SOLID):5_迪米特法则

标签:

原文地址:http://www.cnblogs.com/5iedu/p/5478221.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!