OOAD-8 面向对象设计七原则--迪米特法则/最少知识原则

迪米特法则的定义

  迪米特法则又叫做最少知识原则。它的定义是:只与你的直接朋友交谈,不和陌生人说话。其含义是如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用。可以通过第三方转发该调用。其目的是降低类之间的耦合度,提高模块之间的相对独立性

  迪米特法则中的朋友是指:当前对象本身、当前对象的成员变量、当前对象所创建的对象、当前对象的方法参数等。这些对象同当前对象存在关联、聚合、组合关系,可以直接访问这些对象的方法。

  狭义理解:一个对象应该对其他对象有最少的了解。通俗的将,一个类应该对自己需要耦合或调用的类知道的最少。它的内部如何复杂如何实现都无须关心。只需要知道它的public方法。

  广义理解:

    一个模块设计的好坏的一个重要标志就是该模块在多大程度上将自己的内部数据和实现的有关细节隐藏起来。

    一个软件实体应当尽可能少的与其他实体类发生交互。降低软件实体之间的耦合。

    每一个软件单位对其他的但愿都只有最少的知识。而且局限于那些与本单位密切相关的软件单位。

迪米特原则的目的:

  降低类之间的耦合度。每个类都尽量减少对其他类的依赖。因此,系统的各个功能模块独立性提高。那么可复用性也会提高

迪米特原则的优点

  类间解耦、弱耦合。提高类的可复用性

迪米特原则的缺点

   造成系统的不同模块之间的通信效率降低,是系统的不同模块之间不容易协调。

   由于迪米特法则要求类与类之间尽量不要直接通信。而是通过第三方转发。因此可能出现系统中存在大量的第三方中介类。增加系统复杂度。而解决这个问题的方法就在于。使用依赖倒置原则。面向接口编程。此时调用方(高层)和被调用方(低层)之间就有了一个抽象层。让抽象层作为第三方类。

namespace DesignPrinciples.LowOfDemeter
{
    class Program
    {
        static void Main(string[] args)
        {
            GroupLeader group = new GroupLeader();
            Teacher teacher = new Teacher();
            teacher.Command(group);
            Console.WriteLine("==== 我是分割线 ====");
            teacher.CommandByDemeter(group);
        }
    }

    public class Teacher
    {
        /// <summary>
        /// 教师发送命令
        /// </summary>
        /// <param name="group"></param>
        public void Command(GroupLeader group)
        {
            List<Student> students = new List<Student>();
            for (int i = 0; i < 20; i++)
            {
                students.Add(new Student());
            }
            group.Count(students);
        }

        public void CommandByDemeter(GroupLeader group)
        {
            group.CountByDemeter();
        }
    }

    public class GroupLeader
    {
        /// <summary>
        /// 学习委员点名
        /// </summary>
        /// <param name="girls"></param>
        public void Count(List<Student> girls)
        {
            Console.WriteLine("学生人数:" + girls.Count);
        }

        public void CountByDemeter()
        {
            List<Student> students = new List<Student>();
            for (int i = 0; i < 20; i++)
            {
                students.Add(new Student());
            }
            Console.WriteLine("学生人数(迪米特):" + students.Count);
        }
    }

    public class Student
    {
        public string Name { get; set; }
    }
}

  

原文地址:https://www.cnblogs.com/exceptionblog/p/11052021.html

时间: 2024-07-28 21:27:10

OOAD-8 面向对象设计七原则--迪米特法则/最少知识原则的相关文章

设计模式之迪米特原则(LOD)(最少知识原则)

来源:迪米特法则(LoD)最初是用来作为面向对象的系统设计风格的一种法则,是很多著名系统,如火星登陆软件系统.木星的欧罗巴卫星轨道飞船的软件系统的指导设计原则. 迪米特法则(LoD)又可分为两种:狭义的迪米特法则(LoD)和广义的迪米特法则(LoD). 概念: LOD:LOD,Law Of Demeter 迪米特法则又称最少知识原则,也就是说一个对象应当对其他对象有尽可能少的了解. 狭义的迪米特法则(LoD): 如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用. 如果其中的一个

【OOAD】面向对象设计原则概述

软件的可维护性和可复用性 知名软件大师Robert C.Martin认为一个可维护性(Maintainability) 较低的软件设计,通常由于如下4个原因造成:? 过于僵硬(Rigidity) ? 过于脆弱(Fragility) ? 复用率低(Immobility) ? 黏度过高(Viscosity) 软件工程和建模大师Peter Coad认为,一个好的系统设计应该具备如下三个性质:? 可扩展性(Extensibility) ? 灵活性(Flexibility)? 可插入性(Pluggabil

面向对象设计原则 迪米特法则(Law of Demeter)

迪米特法则(Law of Demeter) 又叫作最少知识原则(Least Knowledge Principle 简写LKP),英文简写为: LoD. 这是一种面向对象程序设计的指导原则,它描述了一种保持代码松耦合的策略. 迪米特法则可以简单说成:talk only to your immediate friends. 即 只和自己直接的 "朋友" 交谈. 对于OOD来说,又被解释为下面几种方式: 一个软件实体应当尽可能少的与其他实体发生相互作用. 每一个软件单位对其他的单位都只有最

面向对象五大原则-----迪米特法则

什么是迪米特法则 迪米特法则(Law of Demeter )又叫做最少知识原则,也就是说,一个对象应当对其他对象尽可能少的了解.不和陌生人说话.英文简写为: LoD. 迪米特法则最初是用来作为面向对象的系统设计风格的一种法则,于1987年秋天由lan holland在美国东北大学为一个叫做迪米特的项目设计提出的. 迪米特法则的模式与意义 迪米特法则可以简单说成:talk only to your immediate friends. 对于OOD来说,又被解释为下面几种方式:一个软件实体应当尽可

设计模式六大原则——迪米特法则(LoD)

1.背景 在图书馆借书,刚开始的时候,直接跑到相应的楼层去,到里面去转,去找要借的书,在里面溜达半天才能找到:后来知道图书馆有一个电脑查询处,然后直接在电脑上输入想要借的书,电脑就会显示你想要借的书的信息,还有所在的相关楼层存放的相关位置. 2.定义 迪米特法则(Law of Demeter)又叫作最少知识原则(LKP,Least Knowledge Principle),就是说一个对象应当对其他对象有尽可能少的了解,类与类之间的了解的越多,关系越密切,耦合度越大,当一个类发生改变时,另一个类也

设计模式之六大原则——迪米特法则(LoD,LKP)

转载于:http://www.cnblogs.com/muzongyan/archive/2010/08/05/1793000.html 定义: 迪米特法则(Law of Demeter,LoD)也称为最少知识原则(Least Knowledge Principle,LKP). 一个对象应该对其他对象有最少的了解.通俗地讲,一个类应该对自己需要耦合或调用的类知道得最少,你(被耦合或调用的类)的内部是如何复杂都和我没关系,那是你的事情,我就知道你提供的public方法,我就调用这么多,其他的一概不

OOAD之面向对象设计原则

学习这个设计模式 真的觉得很抽象,只有自己多多的领会! 在很多时候,很多的知识都会觉得讲起来是很矛盾的. 本章目标 1 掌握内聚度和耦合度的概念 2 掌握面向对象设计原则 (一)如何衡量软件设计的质量 内聚度:表示一个应用程序的单个单元所负责的任务数量和多样性.内聚与单个类或者单个方法单元相关.(在我自己的理解就是:在一个类中完成自己所有的任务,这些任务都在自己的类中.) 耦合度:耦合度表示类之间关系的紧密程度.耦合度决定了变更一个应用程序的容易程度.在紧密耦合的类结构中,更改一个类会导致其它的

10设计模式六大原则——迪米特法则

设计模式六大原则(5):迪米特法则 定义:一个对象应该对其他对象保持最少的了解. 问题由来:类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大. 解决方案:尽量降低类与类之间的耦合. 自从我们接触编程开始,就知道了软件编程的总的原则:低耦合,高内聚.无论是面向过程编程还是面向对象编程,只有使各个模块之间的耦合尽量的低,才能提高代码的复用率.低耦合的优点不言而喻,但是怎么样编程才能做到低耦合呢?那正是迪米特法则要去完成的. 迪米特法则又叫最少知道原则,最早是在1987年

设计模式——迪米特法则(最少知识原则)

迪米特法则: 如果两个类不必彼此直接通信,那么这两个类就不要发生直接的相互作用. 如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用. 迪米特法则首先强调的前提是:在类的结构设计上,每一个类都应该尽量降低成员的访问权限,也就是说,一个类包装好 自己的private状态,不需要让别的类知道的字段或行为就不要公开. 迪米特法则的根本思想是:强调了类之间的松耦合. 在程序设计的时候,类之间的耦合越弱,越有利于复用,一个处在弱耦合的类被修改,不会对有关系的类造成波及. 也就是说信