-1

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

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

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

  • 为我可能需要使用的任何对象创建吸气剂并像那样使用它们(这可能不是最佳实践)。

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

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

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

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

例子:

  • 用户单击菜单上的某些内容,这应该会影响与菜单无关的内容或与其密切相关的内容。对于

  • 具有应释放其内存的消耗方法的类应访问可能包含但不直接相关的对象。例如,在画布上绘制的汽车对象应从该对象和该数组中删除自己保存与 GUI 线程没有任何关系的汽车列表。

4

1 回答 1

1

墨忒耳法则说:不要和陌生人说话。

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

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

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

于 2012-12-01T20:02:54.587 回答