谁应该了解对方?

Joe*_*ath 6 c++ oop

我总是对谁应该了解对方感到困惑.

例如:

Circle.Draw(&canvas) 要么 Canvas.Draw(&circle)

要么 Draw(&canvas, &circle)

EmployeeVector.Save(&file) 要么 File.Save(&employee_vector)

甚至还是

  void operator() (Employee e) { Save( e.Serialize();}
  for_each(employees.begin(), employees.end(),File)
Run Code Online (Sandbox Code Playgroud)

我想我最终"抽象"了太多,我有各种适配器,所以没有人知道任何人.

Eti*_*tel 8

取决于谁拥有专业知识.

如果您唯一可以绘制的是圈子,那么当然您可以将其放入Canvas并继续前进.如果Canvas有一个方法来绘制泛型Shapes,那么它将落在Shape绘制自己的各个子类上.例如,圆圈肯定知道如何在画布上绘制自己.我怀疑画布本身知道如何画圆,除非你硬编码功能,这有点杀死了多态的整个想法.

出于同样的原因,向量可能知道如何将自己保存到文件中,但我怀疑文件知道如何处理向量.但是向量可以包含各种各样的东西,因此它应该将大部分工作委托给它的实际元素.所以这个for_each想法可能是最好的.