相互需要的对象

时间:2016-04-25 20:01:58

标签: oop

我处于这样的情况,即两个班级(让我们称之为 A B )彼此相关(他们的方法依赖于另一个班级的数据)但是IS-A关系不合适。我可以使用合成,这样两个对象都有存储另一个对象的字段。但这对我来说似乎很难看。我目前所做的是创建另一个类 C ,其中包含来自 A B 的对象,当我想要调用类的方法时 A ,我传递对象 B 。我对这种方法的问题是:

  • 我需要将一个对象传递给另一个对象,所以它开始类似于一个简单的函数参数传递而不是OOP方法,其中对象封装了它的数据
  • 如果我需要更改某些内容,我可能需要修改 A B 这两个类的代码,这不是代码重用的好点

你推荐什么?

示例

class Mesh:
  method: plot(this, Solver)
          {
             plot data from class Solver // need to pass a Solver object, so the class is not self-contained
          }
  method: intersect(this, Domain)
          {
             do sth // depends on Domain, so we need to pass it
          }

class Domain:
  method: plot(this)
          {
             plot data from own data // no problem
          }
  method: selectVertex(this, Mesh)
          {
             do sth // depends on Mesh, so we need to pass it
          }

谢谢你, 佐尔坦

1 个答案:

答案 0 :(得分:0)

"计算机科学中的所有问题都可以通过另一层间接解决,除了间接层太多的问题" - 大卫惠勒。

您尝试添加另一层间接但它没有解决您的问题。所以有一件事从根本上说是错误的。

以下是我的观点:

当你有2个彼此相互依赖的对象时,它可能意味着2个类应该合并为一个更大的类,这反过来会产生一个具有两者功能的更大的对象。

为什么不呢?有许多方法可以面向对象的方式为您的域名业务建模,而您的方法可能不再适合您的域名业务增长。