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

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)解耦是有限度的,在实际的项目中,需要适度考虑这个原则。

时间: 2024-11-06 21:51:09

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

第2章 面向对象的设计原则(SOLID):3_依赖倒置原则

3. 依赖倒置原则(Dependence Inversion Principle,DIP) 3.1 定义 (1)要依赖抽象,不要依赖具体的实现类.简单的说就是对抽象(或接口)进行编程,不要依赖实现进行编程,这样就降低了客户与实现模块间的耦合.包含3层含义: ①高层模块不应依赖低层模块,两者都应该依赖于抽象 ②抽象不应该依赖细节 ③细节应该依赖于抽象 (2)何为“高层模块”和“低层模块” ①“低层模块”:每个逻辑的实现都是原子逻辑组成,不可分割的原子逻辑就是低层模块.一般和具体实现相关. ②“高层

第2章 面向对象的设计原则(SOLID):6_开闭原则

6. 开闭原则(Open Closed Principle,OCP) 6.1 定义 (1)一个类应该对扩展开放,对修改关闭.要求通过扩展来实现变化,而且是在不修改己有的代码情况下进行扩展,也不必改动己有的源代码或二进制代码. (2)在软件生命周期内,变化是一个既定的事实,在设计时尽量适应这些变化,以提高项止的稳定性和灵活性,真正实现“拥抱变化”.而开闭原则告诉我们要通过扩展来实现这些变化而不是修改原来代码. (3)修改关闭,并不意味着软件不做任何的改动,低层模块的变更,必然要高层模块进行耦合,否

面向对象设计原则之五:迪米特法则

迪米特法则 迪米特法则(Law of Demeter)又叫最少知识原则(Least Knowledge Principle LKP),就是说一个对象应当对其他对象有尽可能少的了解,不和陌生人说话. 对面向对象来说,一个软件实体应当尽可能的少的与其他实体发生相互作用.每一个软件单位对其他的单位都只有最少的知识,而其局限于那些与本单位密切相关的软件单位. 迪米特法则的目的在于降低类之间的耦合.由于每个类尽量减少对其他类的依赖,因此,很容易使得系统的功能模块相互独立,相互之间不存在依赖关系.应用迪米特

第2章 面向对象的设计原则(SOLID):1_单一职责原则

1. 单一职责原则(Single Responsibility Principle,SRP) 1.1 单一职责的定义 (1)定义:一个类应该仅有一个引起它变化的原因.这里变化的原因就是所说的“职责”. (2)如果一个类有多个引起它变化的原因,也就意味着这个类有多个职责.即把多个职责耦合在一起了. (3)“职责”的粒度不好量化.实际开发中,这个原则最容易违反 1.2 单一职责的优点 (1)可以降低类的复杂度,一个类只负责一项职责,其逻辑比负责多项职责的要简单的多 (2)提高类的可读性,提高系统的可

Java 面向对象的设计原则

一. 1.面向对象思想的核心: 封装.继承.多态.   2.面向对象编程的追求: 高内聚低耦合的解决方案: 代码的模块化设计: 3.什么是设计模式: 针对反复出现的问题的经典解决方案,是对特定条件下(上下文)问题的设计方案的经验总结,是前人设计实践经验的精华. 4.面向对象设计原则 是面向对象设计思想(法理精神)的提炼(基本宪法),比面向对象思想的核心要素更具有实操性,比设计模式(各种具体法律条文)更抽象. 5.如何最大限度降低耦合度? 少用类的继承,多用接口隐藏实现细节. 避免使用全局变量.

面向对象的设计原则

面向对象设计原则是学习设计模式的基础,每一种设计模式都符合某一种或者多种面向对象设计原则.通过在软件开发中使用这些原则可以提高软件的可维护行和可用性,让我们可以设计出更加灵活也更加容易扩展的软件系统,实现可维护可复用的目标.在使用面向对象的思想进行系统设计时,前人共总结出了7条原则,它们分别是:单一职责原则.开闭原则.里氏替换原则.依赖注入原则.接口分离原则.迪米特原则和合成复用原则. 1.单一职责原则(SRP) 单一职责原则的核心思想就是:系统中的每一个对象都应该只有一个单独的职责,而所有对象

面向对象思想设计原则 及常见设计模式

1.面向对象思想设计原则 在实际的开发中,我们要想更深入的了解面向对象思想,就必须熟悉前人总结过的面向对象的思想的设计原则. 1)单一职责原则:就是开发人员经常说的”高内聚,低耦合”.也就是说,每个类应该只有一个职责,对外只能提供一种功能,而引起类变化的原因应该只有一个.在设计模式中,所有的设计模式都遵循这一原则. 2)开闭原则:一个对象对扩展开放,对修改关闭.也就是说,对类的改动是通过增加代码进行的,而不是修改现有代码.软件开发人员一旦写出了可以运行的代码,就不应该去改动它,而是要保证它能一直

零散知识点(面向对象七大设计原则,jdbc--BaseDao,jsp九大内置对象。四个作用域)

面向对象七大设计原则: 1.开闭原则(OCP:Open-Closed Principle)2.里氏替换原则(LSP:Liskov Substitution Principle) 3.单一职责原则(SRP:Single responsibility principle)4.接口隔离原则(ISP:Interface Segregation Principle)5.依赖倒置原则(DIP:Dependence Inversion Principle)6.迪米特法则(LOD:Law of Demeter)

java 28 - 1 设计模式 之 面向对象思想设计原则和模版设计模式概述

在之前的java 23 中,了解过设计模式的单例模式和工厂模式.在这里,介绍下设计模式 面向对象思想设计原则 在实际的开发中,我们要想更深入的了解面向对象思想,就必须熟悉前人总结过的面向对象的思想的设计原则 单一职责原则 开闭原则 里氏替换原则 依赖注入原则 接口分离原则 迪米特原则 单一职责原则 其实就是开发人员经常说的"高内聚,低耦合" 也就是说,每个类应该只有一个职责,对外只能提供一种功能,而引起类变化的原因应该只有一个.在设计模式中,所有的设计模式都遵循这一原则. 开闭原则 核