当一个对象需要修改另一个对象时的OOP最佳实践

1 c oop car-analogy

(这是一个类似C的环境)假设我有两个实例对象,一个汽车和一个bodyShop.该车有一个颜色iVar和相应的加速器.bodyShop有一个名为"paintCar"的方法,它将接收一个汽车对象并改变其颜色.

至于实现,为了让bodyShop实际上能够改变汽车对象的颜色,我看到了两种方法.

  1. 使用"&"运算符传入指向汽车的指针.然后bodyShop可以告诉汽车执行一些必须改变颜色的方法,或者它可以直接使用汽车的存取器.

  2. 按值传递汽车对象,执行相同类型的操作以更改颜色,然后让方法返回具有新颜色的汽车对象.然后将原始汽车对象分配给新汽车对象.

选项1对我来说似乎更直接,但我想知道它是否符合OOP最佳实践.一般来说,对于"最大OOP","&"运算符是好还是坏?或者,也许我完全错过了一个更好的选择,可以使这个超级OOPer.请指教 :)

Dri*_*ent 5

选项1是首选:

bodyShop可以告诉汽车执行一些必须改变颜色的方法,或者它可以直接使用汽车的存取器.

更好的是......创建一个IPaintable接口.有车实施IPaintable.让BodyShop依赖于IPaintable而不是Car.这样做的好处是:

  • 现在BodyShop可以绘制任何实现IPaintable(汽车,船,飞机,滑板车)的东西
  • BodyShop不再与Car紧密结合.
  • BodyShop具有更可测试的设计.