将“远”对象传递给另一个对象 - 好的和坏的做法

时间:2012-12-01 19:47:20

标签: java oop

假设我们有一个对象(A),它应该执行另一个对象(B)的方法,该方法不在对象(A)本身的范围内,也不在其成员的范围内。

克服了这个问题,我可能会采用以下方法之一:

  • 在任何可能使用它的对象中存储对象的引用,可能导致内存泄漏

  • 为我可能需要使用的任何对象创建getter并使用它们(这可能不是最佳做法)。

    anObject.getABC().getDEF().getHIG().DoSomething();
    
  • 将一些对象定义为单一音调,这可能是一个很好的解决方案,但每当我使用libery覆盖时,它可能会很痛苦,它的子类不会与过度使用它一起使用。

    < / LI>
  • 静态成员,可能是最糟糕的方式。

我的问题:在维护面向对象的代码的同时,最好的方法是什么,应该考虑什么?

(问题是指一般的OOP,但我更喜欢JAVA中的代码示例)

示例:

  • 用户点击菜单上的内容,这会影响与菜单无关的内容或与其密切相关的内容。

  • 具有应该释放其内存的使用消耗方法的类应该访问可能保持引用但与其无直接关系的对象。例如,在画布上绘制的汽车对象应该删除自身来自它以及包含与GUI线程没有任何关系的汽车列表的数组。

1 个答案:

答案 0 :(得分:1)

Law of Demeter说:不要和陌生人说话。

如果A需要调用B的方法,那么B应该是A的直接依赖。如果B实际上不是A的直接依赖,而是传递依赖,即A依赖于C,这取决于D,它取决于B,然后A应该调用C的方法,它将调用D的方法,它将调用B的方法:

A --> C --> D --> B

阅读您的示例,看起来您正在寻找Observable / Observer方法。例如:当您单击菜单时,菜单应该只调用其观察者(或Swing / AWT术语中的侦听器)的方法,这些方法是接口的实例。监听器会将自己注册到菜单中,以便收到菜单点击的通知。