当前位置: 首页 > 知识库问答 >
问题:

从程序的“相反端”调用对象的方法

乌灿
2023-03-14

我一直在开发创建大型面向对象程序的技能(30多个类)。在读了一本名为《干净代码》的奇幻书籍后,我正在努力使我的代码尽可能干净。我遇到的一个问题是从“跨程序”调用对象的方法

假设我有5节课。`CLASSA ClassB ClassC ClassD CLASSE`

ClassA的一个实例包含ClassB的一个实例,而ClassB又包含classC的一个实例,所以

  1. 使classE的实例成为全局变量,这样classD和classC就可以访问它(以及程序中的任何其他内容)。我觉得这是一个糟糕的形式,因为全局变量通常被认为是坏消息
  2. 在顶层创建ClassE实例,然后将其作为参数传递给ClassA、ClassB和ClassC的构造函数。这样做的问题是,如果这种情况发生不止一次,那么我最终会得到非常长的构造函数参数列表,并且沿着这样的构造函数链传递ojects似乎需要大量的工作
  3. 移动ClassE的对象以由CLASSC实例化。问题在于它与ClassD的耦合性更强,并且在程序的整个运行过程中classc只需要调用一次。

那么在这种情况下我该怎么做呢?我能读到什么关于这方面的资料吗。我知道我可以在类似的情况下使用observer模式,但是当它仅用于一个方法调用时,它似乎太多了,因为我将使整个程序都可以观察到。我想让我的代码尽可能干净!

提前致谢:)

共有1个答案

涂玉韵
2023-03-14

你可以读一下《得墨忒尔定律》(Wikipedia:http://en.wikipedia.org/wiki/law_of_demeter的简短解释,或者一个更长但写得很好的例子http://www.ccs.neu.edu/research/Demeter/demeter-method/lawofdemeter/paper-boy/Demeter.pdf)

  • 根据示例的上下文/内容,例如:将类D构建为类E的包装器(或类似的外观/适配器)。也就是说,如果c类有时需要与E实例进行对话,那么它会通过D类实例进行对话。
  • 另一种方法是为那些需要类E实例的对象提供对类E实例的引用。
  • 如果您的所有对象都与E的同一个实例对话,您还可以考虑singleton模式,在这种模式中,一个类只有一个实例。但此实例或多或少是全局可用的。

给出更多的上下文信息,我们可以进一步发展它。

 类似资料:
  • 问题内容: 我的模板看不到从Spring传递过来的对象。 我的代码: Contoller的代码: 主模板的代码: 片段的代码: 结果,我看到了方法调用的代码,例如 为什么thymeleaf不调用方法,而是在输出页上打印此文本?在http://www.thymeleaf.org/doc/tutorials/2.1/usingthymeleaf.html的示例中,方法调用具有相同的语法,例如 相同的代

  • 本文向大家介绍在Java中使用反射调用对象的方法,包括了在Java中使用反射调用对象的方法的使用技巧和注意事项,需要的朋友参考一下 可以使用java.lang.Class.getDeclaredMethods()方法调用对象的方法。此方法返回一个数组,其中包含具有公共,私有,受保护和默认访问权限的所有Method对象。但是,不包括继承的方法。 另外,如果类或接口没有方法,或者在Class对象中表示

  • 7.2.3 对象方法的调用 一旦创建了对象,就可以通过向对象发消息来调用对象的方法。消息的格式如下: <对象>.<方法>(<实参>) 其含义是请求<对象>执行<方法>,方法定义中列出的形式参数由<实参>提供。 例如,接着前面的例子执行如下语句: >>> p1.whatName() My name is Lucy >>> p2.whatName() My name is Tom >>> p2.ho

  • 问题内容: 我正在尝试为对象编写一个equals方法,以比较它们的字段 并在相等时返回true。 这可能是什么问题? 问题答案: 由于color 似乎是一个Color,所以是一个类,因此是一个引用类型,这意味着您需要使用它们equals()来比较颜色。 如注释中所述,==用于比较引用类型实际上是比较Java中的内存地址。仅true当它们都 引用内存中的同一对象时,它才会返回。 akf指出,您需要为

  • 类以这种方式实例化: 代码如下:

  • JavaScript 在Object对象上面,提供了很多相关方法,处理面向对象编程的相关操作。本章介绍这些方法。 Object.getPrototypeOf() Object.getPrototypeOf方法返回参数对象的原型。这是获取原型对象的标准方法。 var F = function () {}; var f = new F(); Object.getPrototypeOf(f) === F