设计模式 迪米特法则

只和朋友交流

Only talk to your immediate friends 只与直接的朋友通信。即每个对象都有耦合关系,对象之间有耦合。

定义老师类

public class Teacher{
    // 老师对学生发布命令,清点学生
    public void commond(GroupLeader groupLeader){
        List listGirls = new ArrayList();
        // 初始化学生
        for(int i = 0; i < 20; i++){
            listGirls.add(new Girl());
        }
        // 然后进行查询任务
        groupLeader.countGirls(listGirls);
    }
}

然后定义体育文员,清查学生

public class GroupLeader{
    // 查询数量
    public void countGirls(List listGirls){

    }
}

定义学生类

public class Girl{

}

最后定义场景

public class Client{
    public static void main(String[] args){
        Teacher teacher = new Teacher();
        // 发布命令
        teacher.commond(new GroupLeader());
    }
}

上方代码的问题,Teacher类有一个朋友类,即GroupLeader,并且Girl类出现在commond方法体内,不属于朋友类。

朋友类:出现在成员变量,方法的输入参数中的类称为成员朋友类,出现在方法内部的类不属于朋友类,

迪米缇法则 一个类,只和朋友交流。不能和非朋友交流。但是刚刚定义的commond于Girl类有交流,即声明了List数组,即与陌生的Girl类有交流

修改如下

修改后的老师类

public class Teacher{
    // 老师对学生发布命令
    public void commond(GroupLeader groupLeader){
        // 告诉体育委员进行清查任务
        groupLeader.countGirls();
    }
}

体育委员

public class GroupLeader{
    private List listGirls;
    // 将全班学生带入,通过此构造函数Girl产生联系
    public GroupLeader(List _listGirls){
        this.listGirls = _listGirls;
    }
    // 进行学生数量的清理
    public void countGirls(){
        System.out.println(" " + this.listGirls.size());
    }
}

定义场景

public class Client{
    public static void main(String[] args){
        List listGirls = new ArrayList();   // 创建一个群体列表
        // 对学生初始化
        for(int i = 0; i < 20; i++){
            listGirls.add(new Girl());
        }
        Teacher teacher = new Teacher();
        // 发布命令
        teacher.commond(new GroupLeader(listGirls))
    }
}

总结, 类与类之间的关系是建立在类之间,一个方法中不要引入一个类中不存在的对象。

朋友间有距离

一个软件安装的过程

first定义第一步,second定义第二步,third定义第三 步。

public class Wizard{
    private Random rand = new Random();
    // 第一步
    public int first(){

    }
    // 第二步
    public int third(){

    }
    // 第三步
    public int third(){

    }
}

最后定义installSoftware

public class installSoftware{
    public void installWizard(Wizard wizard){
        int first = wizard.first();
        int second = wizard.second();
        int third = wizard.third();
    }
}

最后定义场景

public class Client{
    public static void main(String[] args){
        installSoftware invoker = new installSoftware();
        invoker.installWizard(new Wizard());
    }
}

根据迪米特法则,两个类之间知道的越少越好,Wizard类的太多方法被installSoftware使用,两者的关系过于亲密,修改后如下

public class Wizard{
    private Random rand = new Random();
    private int first(){
    }
    private int second(){
    }
    privaet int third(){
    }
    // 对外只提供了一个installWizard方法
    public void installWizard(){
        int first = this.first();
        int second = this.second();
        int third = this.third();
    }

}
public class insatllSoftware{
    public void installWizard(Wizard wizard){
        wizard.installWizard(); // 两个类通过此方法连接
    }
}

场景类

public class Client{
    public static void main(String[] args){
        installSoftward invoker = new installSoftware();
        invoker.installWizard(new Wizard());
    }
}

是自己的就是自己的

如果一个方法放在本类中,即不增加类间关系,也不会对本类不产生负面影响,那就放置在本类中。

原文地址:https://www.cnblogs.com/melovemingming/p/10014526.html

时间: 2024-10-06 18:41:29

设计模式 迪米特法则的相关文章

无熟人难办事?- 闲聊设计模式-迪米特法则

(续上篇)           次日傍晚,小菜敲开了大鸟家的门.        "回来啦!怎么样?第一天上班感受多吧."大鸟关心的问道.        "感受真是多哦!!!"小菜一脸的不屑一顾.        "怎么了?受委屈了吗.说说看怎么回事?"        "委屈谈不上,就感觉公司氛围不是很好.我一大早就到他们公司,正好我的主管出去了不在公司.人事处的小杨让我填了表后,就带我到IT部领取电脑,她向我介绍了一个叫'小张'的同事认识

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

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

大话设计模式---迪米特法则

迪米特法则/最少知识原则 如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用.如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用. 前提:在类的结构设计上,每一个类都应当尽量降低成员的访问权限. 根本思想:强调类之间的松耦合.

设计模式--迪米特法则(Lod/LKP)

迪米特法则:(Law of Demeter, LoD),也称最少知识原则(Least Knowledge Principle, LKP) 理解: 如果两个类不必彼此直接通信,那么这两个类就不应该发生直接的相互作用.如果其中一个类需要调用另一个类的某一个放发的话,可以通过第三者转发这个调用. 只和朋友交流(更准确来讲是:直接的朋友) 每个对象都必然会与其他对象有耦合关系,两个对象之间的耦合就成为朋友关系,这种关系的类型有很多,如组合.聚合.依赖等. 朋友类的定义:出现在成员变量.方法的输入输出参数

设计模式之6大原则(5)-迪米特法则

迪米特法则(Law of Demeter)又叫作最少知识原则(Least Knowledge Principle 简写LKP),就是说一个对象应当对其他对象有尽可能少的了解,不和陌生人说话.英文简写为: LoD. 迪米特法则可以简单说成:talk only to your immediate friends. 对于面向OOD来说,又被解释为下面几种方式:一个软件实体应当尽可能少的与其他实体发生相互作用.每一个软件单位对其他的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位. 迪米特

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

迪米特法则 定义:一个对象应该对其他对象保持最少的了解. 问题由来:类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大. 解决方案:尽量降低类与类之间的耦合. 迪米特法则(Law of  Demeter, LoD):一个软件实体应当尽可能少地与其他实体发生相互作用. 如果一个系统符合迪米特法则,那么当其中某一个模块发生修改时,就会尽量少地影响其他模块,扩展会相对容易,这是对软件实体之间通信的限制,迪米特法则要求限制软件实体之间通信的宽度和深度.迪米特法则可降低系统的耦

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

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

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

迪米特法则的简写为 LoD,看清楚中间的那个 o 是小写.迪米特法则也叫做做最少知识原则(Least Knowledge Principle,简称 LKP)说的都是一会事,一个对象应该对其他对象有最少的了解,通俗的讲一 个类对自己需要耦合或者调用的类应该知道的最少,你类内部是怎么复杂.怎么的纠缠不清都和我没关系, 那是你的类内部的事情,我就知道你提供的这么多 public 方法,我就调用这个:迪米特法则包含以下四层 意思: 只和朋友交流.迪米特还有一个英文解释叫做“Only talk to yo

报童、钱包和迪米特法则(设计模式迪米特原则经典论文翻译)

写在文章前: 或许你写过无数代码,参与过很多大型系统的设计,但,你是否曾经思考过,你的设计可扩展.易维护么,在高速变化的互联网世界里,它能经得起这种急速变化的考验么?如果你没想过这些问题,那请先放下你那些牛逼的梦想,放下你的高傲,好好去理解.回味设计六大原则和23种设计模式,因为它们是你腾飞的基石.今天,我勇敢的尝试翻译一篇有关设计原则的经典论文,希望对大家有帮助.(翻译是一项很费时.费精力的活,而且博主英语水平也不是特别好,翻译时多采用意译,见谅) 前言 在我读大学的时候,我的一个教授说每个程