html5中meter讲解_Java中的得墨meter耳定律–最少知识原理–实际示例

html5中meter讲解

得墨meter耳定律(也称为最少知识定律)是一种编码原理,它表示模块不应该知道其操作的对象的内部细节。 如果代码取决于特定对象的内部细节,则很有可能一旦该对象的内部发生更改,它就会中断。 由于封装是关于隐藏对象的内部细节并仅公开操作的,因此它也声明了Demeter定律 。 许多Java程序员都犯了一个错误,那就是它使用getter方法公开了对象的内部细节,而这正是知识最少的原则提醒您的地方。 在阅读一本必读的编程书 《罗伯特·C·马丁的清洁代码》时 ,我首先了解了这一原理。 除了本书教给您的许多好处之外, “最起码的原则”是一个原则,我至今仍然记得。 像许多坏事一样,由于以流利的方式编写的方法的优美链接,您将极力违反《德米特律法》。 从表面上看,它看起来不错,但是一旦您想到了最少知识的原理,您就会开始看到真实的图画。 在本文中,我们将看到Demeter定律的正式定义,并探索违反该原理的代码段。

根据Demeter定律,对象O的方法M应该仅调用以下类型的方法:

  1. 对象O本身的方法
  2. 作为参数传递的Object方法
  3. 对象的方法,保存在实例变量中
  4. 在方法M中本地创建的任何对象

更重要的是,方法不应在上面指定的任何后续方法调用返回的对象上调用方法,正如Clean Code所说的“与朋友交谈,而不是与陌生人交谈”。 除了了解面向对象编程的基本概念(例如抽象 , 多态 , 继承和SOLID设计原理)外 ,还值得了解像这样的有用原理,它是通过经验发现的。 在下面的示例中,我们将看到一种方法如何违反上述规则以违反定界符定律。

public class LawOfDelimterDemo {/*** This method shows two violations of "Law of Delimiter" or "Principle of least knowledge".*/public void process(Order o) {// as per rule 1, this method invocation is fine, because o is a argument of process() methodMessage msg = o.getMessage();// this method call is a violation, as we are using msg, which we got from Order.// We should ask order to normalize message, e.g. "o.normalizeMessage();"msg.normalize();// this is also a violation, instead using temporary variable it uses method chain.o.getMessage().normalize();// this is OK, a constructor call, not a method call.Instrument symbol = new Instrument();// as per rule 4, this method call is OK, because instance of Instrument is created locally.symbol.populate(); }
}

您可以看到,当我们获取Order类的内部并在该对象上调用方法时,便违反了delimiter的Law ,因为现在此方法知道Message类。 另一方面,调用Order对象的方法很好,因为它作为参数传递给了该方法。 此图像很好地说明了遵循Demeter定律需要做什么。

Java中的Demeter定律与示例

让我们看看另一个违反Demeter法则的代码示例,它如何影响代码质量。

public class XMLUtils {public Country getFirstBookCategoryFromXML(XMLMessage xml) { return xml.getXML().getBooks().getBookArrary(0).getBookHeader().getBookCategory();}
}

现在,此代码取决于许多类,例如
XML消息
XML格式 书 书头 图书类别

这意味着此函数了解XMLMessage,XML,Book,BookHeader和BookCategory。 它知道XML具有
Book,依次具有BookHeader和内部具有BookCategory,这是很多信息。 如果此链接方法调用中的任何中间类或访问器方法发生更改,则此代码将中断。 此代码高度耦合且脆弱。 最好将查找内部数据的责任放入拥有它的对象中。 如果仔细观察,应该只调用getXML()方法,因为它的方法来自XMLMessage类,该方法作为参数传递给方法。 与其将所有这些代码都放入XMLUtils中,不如放在BookUtils或类似的东西上,它们仍然可以遵循Demeter的定律并可以返回所需的信息。

翻译自: https://www.javacodegeeks.com/2014/06/law-of-demeter-in-java-principle-of-least-knowledge-real-life-example.html

html5中meter讲解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/341489.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++中双冒号(::) 和 冒号(:) 的用法

C中双冒号(::) 和 冒号(:) 的用法

网络交换机的分类介绍

从广义上来看,交换机分为两种:广域网交换机和局域网交换机。广域网交换机主要应用于电信领域,提供通信基础平台。而局域网交换机则应用于局域网络,用于连接终端设备,如PC机及网络打印机等。 按照现在复杂的网络构成方…

网络交换机的作用有哪些?

现如今,随着通信业的发展以及国民经济信息化的推进,网络交换机市场呈稳步上升态势,以太网技术已成为当今最重要的一种局域网组网技术,网络交换机也就成为了最普及的交换机。那么,网络交换机的作用有哪些呢?…

什么是序列化? 您需要通过示例解释的有关Java序列化的所有知识

在上一篇文章中,我们介绍了在Java中创建对象的5种不同方法 ,我解释了如何对序列化对象进行反序列化以创建新对象,并且在此博客中,我将详细讨论序列化和反序列化。 我们将以下面的Employee类对象为例进行说明 // If we use Serial…

CopyTranslator 翻译神器的安装与使用

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/tianweidadada/article/details/102641908

网络交换机功能介绍

交换机的主要功能包括物理编址、网络拓扑结构、错误校验、帧序列以及流控。目前交换机还具备了一些新的功能,如对VLAN(虚拟局域网)的支持、对链路汇聚的支持,甚至有的还具有防火墙的功能。 交换机除了能够连接同种类型的网络之外…

C/C++头文件与变量的声明和定义

版权声明:本文为博主转载文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 原文链接:https://blog.csdn.net/mountzf/article/details/51767353 最近遇到了变量重复包含的问题,才发现自己有好多知…

工业以太网交换机的接口知识详解

工业交换机作为局域网节点连接的网络设备,它的接口类型是随着各种局域网和传输介质类型的发展而变化的,分析一下局域网的主要网络类型和传输介质发展过程,我们就不难发现各种工业交换机接口类型。接下来就由飞畅科技的小编来为大家详细介绍下…

C++应用过程中使用知识点

一 读代码中遇到虚函数,此处总结虚函数的用法 转载链接 https://blog.csdn.net/hackbuteer1/article/details/7558868 二 C语言枚举类型(C语言enum用法)详解 转载链接:http://c.biancheng.net/view/2034.html 三 C运算符重载 转载链接 https://www.…

HOW-TO:具有MySQL的JEE应用程序中具有集群功能的Quartz Scheduler

Quartz Scheduler是Java世界中最流行的调度库之一。 过去,我主要在Spring应用程序中使用Quartz。 最近,我一直在研究要在云中部署的JBoss 7.1.1上运行的JEE 6应用程序中的调度。 我考虑的一种选择是Quartz Scheduler,因为它提供了与数据库的集…

办公网络对工业交换机的功能要求

如今,随着社会的发展,很多公司对网络的要求越来越高,系统越来越复杂,很多老线路需要改造升级,对工业交换机的要求也越来越高。但是,很多企业并不懂如何改造升级。今天飞畅科技的小编就来为大家详细讲解下公…

Ubuntu文件上锁了,怎么打开???亲测有效

第一步:你需要用root权限进入你要开锁的那个文件的目录下 第二步:使用下面的命令: ps:abc是你的用户名字 models是你的目标解锁文件名字 sudo chown abc models

鸡肉和鸡蛋–测试前解决Spring属性

考虑一个负责进行远程调用和获取详细信息的服务类: ... public class CitiesService { private final WebClient.Builder webClientBuilder; private final String baseUrl; public CitiesService( WebClient.Builder webClientBuilder, Value ( "${cityservi…

工业交换机和工控交换机有什么区别?

众所周知,以太网交换机一般分为:商用(以太网)交换机、工业(以太网)交换机、家用(以太网)交换机,因为我们是专业的工业交换机厂家,在这里着重介绍下工业交换机。 工业交换机一般用在工业生产场合,通常外观和安装形式多…

Ubuntu16.04通过wine环境安装微信与QQ等软件

很多双系统用户平时开发项目时会在Ubuntu下进行开发,但是由于Ubuntu下缺少腾讯QQ和微信的官方客户端支持,需要使用微信或者QQ只能使用网页版本,但是有一些用户由于某些原因是无法通过网页登录微信的,会提示"为了你的帐号安全,此微信号不能登录网页微信。你可以…

工业型交换机相比普通交换机有哪些要求?

随着自动化技术逐渐成熟,并伴随工业以太网的应用和大中型工业控制的网络的创建,工业交换机的应用越来越广泛。工业型交换机与一般交换机对比有必须的差异,工业型交换机在整体规划上及其在电子器件的采用上,其抗压强度和可接受性层…

使用eclipse调试ns3配置说明

Tips:安装eclipse时注意选择C开发组件; (环境配置参考:https://www.cnblogs.com/zlcxbb/p/3852810.html) (官方配置介绍:https://www.nsnam.org/wiki/HOWTO_configure_Eclipse_with_ns-3&…

工业以太网交换机特点分析及使用注意事项

在网络发达的今天,交换机被许多需要使用网络的朋友使用,可以实现一个网络多台电脑公用。但是什么是工业以太网交换机,很惯性的思维就是工业用的交换机,但是具体工业以太网交换机性能特点有什么呢?接下来就由杭州飞畅科…

java整数的因式分解_如何在Java中找到整数的质数-因式分解

java整数的因式分解编程课程中的常见家庭作业/任务之一是关于Prime Factorization。 要求您编写一个程序以找到给定整数的素因子 。 一个数字的素数因子是将精确地除以给定数字的所有素数。 例如,素数因子35是7和5,它们本身都是素数,并且精确…

【最新】解决Github网页上图片显示失败的问题

转载链接: https://blog.csdn.net/qq_38232598/article/details/91346392?utm_mediumdistribute.pc_relevant_t0.none-task-blog-BlogCommendFromBaidu-1.not_use_machine_learn_pai&depth_1-utm_sourcedistribute.pc_relevant_t0.none-task-blog-BlogCommend…