父子调用方法的设计模式

Design pattern for child calling method in parent

我目前正在从事我最大的项目,但我无法弄清楚如何构建我的代码。我正在寻找一些指导。

我有 2 个对象 TileContainer。每个 Tile 都有一个二维坐标,并且都是 Container 的子项。 容器 具有 return 位置拼贴、切换拼贴、添加拼贴和删除拼贴的方法。

现在,当您单击某个图块时它会消失,这很容易,因为它是独立的。当我创建从基础 Tile 继承的不同类型的图块时,问题就来了。当您单击时,每种不同类型的图块都会执行不同的操作。有些破坏周围的瓷砖,有些与其他瓷砖交换,而另一些则添加新的瓷砖。为简单起见,我们将这 3 个 subclasses 称为 Tile-destroyTile-swapTile-添加.

我的问题是,当我单击这些图块时,它们如何作用于 Container 中的其他图块。我应该只调用父 class 中的函数还是有更好的方法来做到这一点?我遇到了问题 #including Container 中的 Tile 以及其他方式。我觉得这不是一个合适的模式。

我已经设置好了,所以当点击发生时,Container 会处理它并检查被点击的图块类型,并从那里使用一个大的 else-if 语句进行操作然而,这使得添加新的 tile 类型变得非常困难。理想情况下,当您单击某个图块时发生的所有信息都包含在每个图块子 class 中。

有什么想法吗?

我可以建议你最简单的设计:

  1. 您的容器将成为游戏控制器
  2. 每个tile都有Parent 属性 是指Container
  3. 当您点击图块时,它会向容器发送命令(例如,DestroyTile(x, y) 或 AddTile(x, y)
  4. 容器处理此命令并销毁、添加或交换图块。

如果您想要非常好的和更解耦的设计,您还可以为所有操作类型 DestroyTileHandler、AddTileHandler 创建处理程序。在不同命令的 Container 中,您只需将它们 [commands] 传递给适当的处理程序。您还需要将上下文对象(如带有图块的字段)传递给处理程序。这允许您添加和修改新操作,甚至无需更改容器代码。

查看相关模式:命令、观察者

欢迎提问,祝你好运!