父母中子调用方法的设计模式

时间:2015-08-04 19:49:51

标签: oop design-patterns

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

我有2个对象 Tile 容器。每个 Tile 都有一个2D坐标,并且都是容器的子项。 容器包含返回位置切片,切换切片,添加切片和移除切片的方法。

现在当你点击一个瓷砖时它会消失,这很容易,因为它是自包含的。当我创建从基础 Tile 继承的不同类型的切片时,问题就来了。单击它时,每种不同类型的磁贴都会执行不同的操作。一些破坏周围的瓷砖,一些切换与其他瓷砖和其他添加新瓷砖。为简单起见,我们将这三个子类称为 Tile-destroy Tile-swap Tile-add

我的问题是,当我点击这些图块时,它们如何作用于容器中的其他图块。我应该只调用父类中的函数还是有更好的方法来执行此操作?我遇到了麻烦#include 容器中的 Tile 以及相反的方式。我觉得它不是一个合适的模式。

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

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

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

  1. 您的容器将成为游戏控制器
  2. 每个磁贴都有Parent属性,它引用Container
  3. 当您单击tile时,它会将Command发送到Container(例如,DestroyTile(x,y)或AddTile(x,y)
  4. 容器处理此命令并销毁,添加或交换切片。
  5. 如果您想要真正优秀且更加分离的设计,您还可以为所有操作类型DestroyTileHandler,AddTileHandler创建处理程序。在Container上的不同命令中,您只需将它们[命令]传递给适当的处理程序即可。您还需要将上下文对象(如Field with tiles)传递给处理程序。这允许您添加和修改新操作,甚至不更改Container代码。

    参见相关模式:Command,Observer

    随意提问和祝你好运!