在系统设计中应用迪米特法则_软件设计原则口诀

在系统设计中应用迪米特法则_软件设计原则口诀  迪米特原则又叫 迪米特法则/最少知道原则。现在我们给出迪米特原则的定义:一个对象应该对其他对象保持最少的了解。它的优点是降低了类之间的耦合。它强调只和朋友交流,不和陌生人说话。其中朋友是指出现在成员变量、方法的输入、输出参数中的类称为成员朋友类,而出现在方法体内部的类不属于朋友类。 下面我们通过代码,更好的解释迪米特原则。比如我是一个公司的老板,我开了一家网上课程网站,我让我的…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

    迪米特原则又叫  迪米特法则/最少知道原则。现在我们给出迪米特原则的定义:一个对象应该对其他对象保持最少的了解。它的优点是降低了类之间的耦合。它强调只和朋友交流,不和陌生人说话。其中朋友是指出现在成员变量、方法的输入、输出参数中的类称为成员朋友类,而出现在方法体内部的类不属于朋友类。

  下面我们通过代码,更好的解释迪米特原则。

比如我是一个公司的老板,我开了一家网上课程网站,我让我的TeamLeader帮我统计一下,目前该公司在线课程有多少个?怎么办呢,转化为代码如下:

package com.zybank.design.principle.demeter;

import java.util.ArrayList;
import java.util.List;

public class Boss {
    public void commandCheckNumber(TeamLeader teamLeader){
        List<Course> list = new ArrayList<Course>();
        for (int i =0;i<200;i++){
            list.add(new Course());
        }
        teamLeader.checkNumberOfCourses(list);
    }
}

Jetbrains全家桶1年46,售后保障稳定

package com.zybank.design.principle.demeter;

import java.util.List;

public class TeamLeader {
    public void checkNumberOfCourses(List list){
        System.out.println("总有课程"+list.size());
    }
}
package com.zybank.design.principle.demeter;

public class Course {
}

在写一个测试类:

package com.zybank.design.principle.demeter;

public class Test {
    public static void main(String[] args){
        Boss boss = new Boss();
        TeamLeader teamLeader = new TeamLeader();
        boss.commandCheckNumber(teamLeader);
    }

}

 

大家感觉上述代码怎么样?有没有什么问题?当然有问题了,这样写的代码就是违背了我们现在讲述的迪米特原则。Course这个类就不应该出现在Boss类里。老板让TeamLeader去查一下课程的数量,其他的他并不想关心。所以我们的代码可以做进一步的优化。

package com.zybank.design.principle.demeter;


public class Boss {
    public void commandCheckNumber(TeamLeader teamLeader){
        teamLeader.checkNumberOfCourses();
    }
}
package com.zybank.design.principle.demeter;

import java.util.ArrayList;
import java.util.List;

public class TeamLeader {
    public void checkNumberOfCourses(){
        List<Course> list = new ArrayList<>();
        for (int i =0;i<200;i++){
            list.add(new Course());
        }
        System.out.println("总有课程"+list.size());
    }
}
package com.zybank.design.principle.demeter;

public class Course {
}

而我们的测试类是不用改变的:

package com.zybank.design.principle.demeter;

public class Test {
    public static void main(String[] args){
        Boss boss = new Boss();
        TeamLeader teamLeader = new TeamLeader();
        boss.commandCheckNumber(teamLeader);
    }

}

经过上述代码的优化,相信我们对迪米特原则有了一个很清楚的认识。那我们在实际的开发中用起来吧。

 

 

 

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/234303.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • cbow模型详解_老C模型

    cbow模型详解_老C模型引言前面我分析了Word2vec的一种模型叫做skip-gram模型。在这篇文章中,我将讲述另一个word2vec模型——连续词袋模型(CBOW)模型。如果你理解skip-gram模型,那么接下来的CBOW模型就更好理解了,因为两者模型互为镜像。我们先来看看CBOW模型与skip-gram模型对比图:如何,这是不是镜像关系?所以接下来的讲解也会和skip-gram那篇文章极其类似。前向传播接

  • 排序二叉树的建立与中序遍历

    排序二叉树的建立与中序遍历树结构练习——排序二叉树的中序遍历TimeLimit:1000msMemorylimit:65536K有疑问?点这里^_^题目描述在树结构中,有一种特殊的二叉树叫做排序二叉树,直观的理解就是——(1).每个节点中包含有一个关键值(2).任意一个节点的左子树(如果存在的话)的关键值小于该节点的关键值(3).任意一个节点的右子树(如果存在的话)的关键值大于该节点的关键值。现

  • mysql添加联合主键

    mysql添加联合主键文章目录1.创建表的同时创建联合主键2.针对已经存在表,添加联合主键3.删除主键约束格式:首先解释一下什么是联合主键联合主键,指的是把两个列看成是一个整体,这个整体是不为空,唯一,不重复1.创建表的同时创建联合主键格式1:createtable表名(列名1数据类型,列名2数据类型,constraint主键约束的名字primarykey(列名1,列名2));格式2:createtable表名(列名1数据类型,列名2数据类型,primarykey(列名

  • 微信H5分享到朋友圈,转发朋友功能随记[通俗易懂]

    微信H5分享到朋友圈,转发朋友功能随记[通俗易懂]最近刚做了一个微信公众号H5项目,里面包含一个分享到朋友圈和分享给好友的功能。配置白名单以及公众号js安全域名这些就不赘述了,接下来简单介绍下实现这个功能的几个前端步骤因为是微信网页开发,项目里如果有用到一些分享,音频,视频的功能就必须接入它的SDK工具包,详情可以到官方文档里看一下第一步绑定域名先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。备注:登录后可在“开发者中心”查看对应的接口权限。第二步引入JS文件在需要调用JS接口的页面引入如下JS文件,(支持ht

  • openssl 签发证书_keytool生成证书

    openssl 签发证书_keytool生成证书第一步Openssl产生私钥RSA第二步生成公钥第三步创建证书签名请求CSR文件第四步生成证书其它第一步:Openssl产生私钥(RSA)//1、生成私钥$opensslgenrsa-aes128-outfd.key2048GeneratingRSAprivatekey,2048bitlongmodulus….+++……

  • Linux futex_centos8 pip

    Linux futex_centos8 pipPriorityInheritance,优先级继承,是解决优先级反转的一种办法。一个经典的例子:A/B/C三个实时进程,优先级A>B>C。C持有a锁,而A等待a锁被挂起。原本C释放a锁之后,A进程就可以继续执行的,但是偏偏有个比C优先级高的B进程存在,导致C得不到运行,也就没法释放a锁,从而导致A进程一直挂起。从整体上看,进程B虽然比A优…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号