六大设计原则之迪米特法则

定义:一个类和另一个类应该保持最小的了解

问题由来:类与类之间的关系越密切,耦合度越大,当一个类发生变化时,对另一个类影响也越大。

解决方案:尽量降低类与类之间的耦合。

//总公司员工
class Employee{
    private String id;
    public void setId(String id){
        this.id = id;
    }
    public String getId(){
        return id;
    }
}

//分公司员工
class SubEmployee{
    private String id;
    public void setId(String id){
        this.id = id;
    }
    public String getId(){
        return id;
    }
}  

class SubCompanyManager{
    public List<SubEmployee> getAllEmployee(){
        List<SubEmployee> list = new ArrayList<SubEmployee>();
        for(int i=0; i<100; i++){
            SubEmployee emp = new SubEmployee();
            //为分公司人员按顺序分配一个ID
            emp.setId("分公司"+i);
            list.add(emp);
        }
        return list;
    }
class CompanyManager{
    public List<Employee> getAllEmployee(){
        List<Employee> list = new ArrayList<Employee>();
        for(int i=0; i<30; i++){
            Employee emp = new Employee();
            //为总公司人员按顺序分配一个ID
            emp.setId("总公司"+i);
            list.add(emp);
        }
        return list;
    }  

    public void printAllEmployee(SubCompanyManager sub){
        List<SubEmployee> list1 = sub.getAllEmployee();
        for(SubEmployee e:list1){
            System.out.println(e.getId());
        }  

        List<Employee> list2 = this.getAllEmployee();
        for(Employee e:list2){
            System.out.println(e.getId());
        }
    }
}
}  

public class Client{
    public static void main(String[] args){
        CompanyManager e = new CompanyManager();
        e.printAllEmployee(new SubCompanyManager());
    }
}  

迪米特法则的初衷是降低类的耦合,由于每个类都减少了不必要的依赖,因此确实可以降低耦合关系。但凡事有个度,虽然可以避免与非直接的类通信,但是要通信,就必然会通过一个“中介”来发生关系,过分的使用迪米特原则,会产生大量的中介和传递类,导致系统复杂度变大,所以采用迪米特法则时要反复权衡,既要做到结构清晰,又要高内聚低耦合。

转载http://blog.csdn.net/zhengzhb/article/details/7296930

时间: 2024-10-26 13:47:16

六大设计原则之迪米特法则的相关文章

七大设计原则之迪米特法则

定义 迪米特法则(Law of Demeter,LoD)也称为最少知识原则(Least Knowledge Principle,LKP). 一个对象应该对其他对象有最少的了解.通俗地讲,一个类应该对自己需要耦合或调用的类知道得最少,它的内部是如何复杂都和自己没关系,只需知道它提供的public方法,其他的一概不关心. 广义的迪米特法则:    一个模块设计的好坏的一个重要标志就是该模块在多大程度上讲自己的内部数据与实现的有关细节隐藏起来.    一个软件实体应当尽可能少的与其他实体发生相互作用.

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

迪米特法则来自于1987年美国东北大学(Northeastern University)一个名为“Demeter”的研究项目.迪米特法则又称为最少知识原则(LeastKnowledge Principle, LKP),其定义如下: 迪米特法则(Law of  Demeter, LoD):一个软件实体应当尽可能少地与其他实体发生相互作用. 如果一个系统符合迪米特法则,那么当其中某一个模块发生修改时,就会尽量少地影响其他模块,扩展会相对容易,这是对软件实体之间通信的限制,迪米特法则要求限制软件实体之

6大设计原则之迪米特法则

迪米特法则的定义 迪米特法则也称为最少知识原则,一个对象应该对其他对象有最少的了解. 通俗的讲,一个类应该对自己需要耦合或调用的类知道的最少,被调用类的内部是如何复杂都和我没关系,我就知道你的这些public方法,我就调用这么多,其他的我一概不关心. 迪米特法则对类的低耦合提出了要求 1.只和朋友交流 什么是朋友呢? 出现在成员变量.方法的输入输出参数中的类称为朋友类,而出现在方法体内部的类不属于朋友类. 注意: 一个类只与朋友交流,不与陌生类交流,类与类之间的关系是建立在类间的,而不是方法间,

设计模式之禅--六大设计原则之迪米特原则

定义: 一个对象应该对其他对象有最少的了解 它包含以下四层定义 只和朋友交流 朋友类的定义是这样的:出现在成员变量.方法的输入输出函数中的类成为成员朋友类,而出现在方法体内部的类不属于朋友类. 我吧书上的例子简化了一下: A让B去数有多少个C A让B去数有多少个C public class A{ public void command(B b){ List<C> lists = new List<C>(); for(int i = 0; i < 10; ++i){ list.

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

目录: 设计模式六大原则:单一职责原则 设计模式六大原则:接口隔离原则 设计模式六大原则:依赖倒置原则 设计模式六大原则:里氏替换原则 设计模式六大原则:迪米特法则 设计模式六大原则:开闭原则 迪米特法则(LOD): 也叫最少知识原则.迪米特法则的定义是只与你的直接朋友交谈,不与"陌生人"说话.如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该应用.其目的是降低类之间的耦合度,提高模块的相对独立性. 迪米特法则中的朋友是指:当前对象本身.当前对象的成员对

设计模式之六大设计原则

在上篇博文中提到了开放-封闭原则,没有细谈,这次我们来总结一下设计模式的几大原则. 1开放-封闭原则:是指软件实体(类.模块.函数等)应该可以扩展,但是不可修改. 对原则的理解:开闭原则是最具有理想主义色彩的一个原则,它是面向对象设计的终极目标,下面所要介绍的几个原则可以看成是为了符合开闭原则所作的努力和解决办法.对于开闭原则通俗的理解就是,能不改就不改,能少改尽可能的少改.周所周知,物质是运动的,世界是变化的,想要让一个事物永恒不变是不可能的,所以要想让软件绝对符合开闭原则是不可能的. 2单一

浅谈Java六大设计原则

笔者刚接触设计原则的时候,觉得一头雾水,不知道他有什么用.在经历了一段时间的代码加上了解Java设计模式之后.笔者忽然觉得自己以前写的代码就是一堆*.所以,笔者认为设计原则和设计模式对于软件编程设计(非码农)来说是至关重要的事情.相信很多学习编程的人,和我有同样的感受. 我对设计模式和设计原则的理解是:如果把程序员比作武侠,那么设计模式就是修炼内功的易筋经,设计原则就是修炼内功的心法总纲,而具体的技术实现(代码编写)就是罗汉拳.如果你只想自保,那么会罗汉拳就可以了(能够用代码实现功能),不过如果

设计模式中的六大设计原则之一,二

最近在学习设计模式方面的知识,首先接触到的是设计模式中的六大设计原则: 1.单一职责原则: 2.里氏替换原则:3.依赖倒置原则:4.接口隔离原则:5.迪米特法则:开闭原则.下面我来讲讲我对这六大设计自己的理解,如有欠缺地地方,请大家及时指出啊...   1.单一职责原则:应该有且仅有一个原因引起类的变更.通俗的说,即一个类只负责一项职责.下面我们举一个具体的例子来说明一下什么是单一职责原则.电话通话的时候有4个过程发生:拨号,通话,回应,挂机,首先看下面这样一个借口,如图1所示: 图1. 我们来

面向对象原则之一 迪米特法则

前言 面向对象有人分为五大原则,分别为单一职责原则.开放封闭原则.依赖倒置原则.接口隔离原则.里氏替换原则. 也有人分为六大原则,分别为单一职责原则.开放封闭原则.依赖倒置原则.接口隔离原则.里氏替换原则.迪米特法则. 现在我们来介绍迪米特法则 迪米特法则 1)概念 其法则又叫最少知道法则.从名字上就能知道,类与类之间应该是最少知道的,应当加多一个类来辅助类与类之间的联系. 其概念是一个软件实体应当尽可能少的与其他实体发生相互作用,每一个软件单位对其他的单位都只有最少的知识. 2)说道理 为什么