我目前正在开展我最大的项目,但我无法弄清楚如何构建我的代码。我正在寻找一些指导。
我有2个对象 Tile 和容器。每个 Tile 都有一个2D坐标,并且都是容器的子项。 容器包含返回位置切片,切换切片,添加切片和移除切片的方法。
现在当你点击一个瓷砖时它会消失,这很容易,因为它是自包含的。当我创建从基础 Tile 继承的不同类型的切片时,问题就来了。单击它时,每种不同类型的磁贴都会执行不同的操作。一些破坏周围的瓷砖,一些切换与其他瓷砖和其他添加新瓷砖。为简单起见,我们将这三个子类称为 Tile-destroy , Tile-swap 和 Tile-add 。
我的问题是,当我点击这些图块时,它们如何作用于容器中的其他图块。我应该只调用父类中的函数还是有更好的方法来执行此操作?我遇到了麻烦#include 容器中的 Tile 以及相反的方式。我觉得它不是一个合适的模式。
我进行了设置,所以当点击发生时,容器会处理它,并检查点击的图块类型,并使用大的else-if语句从那里进行操作然而这使得非常很难添加新的瓷砖类型。理想情况下,单击tile时所发生的所有信息都包含在每个tile子类中。
有什么想法吗?
答案 0 :(得分:1)
我可以建议你最简单的设计:
如果您想要真正优秀且更加分离的设计,您还可以为所有操作类型DestroyTileHandler,AddTileHandler创建处理程序。在Container上的不同命令中,您只需将它们[命令]传递给适当的处理程序即可。您还需要将上下文对象(如Field with tiles)传递给处理程序。这允许您添加和修改新操作,甚至不更改Container代码。
参见相关模式:Command,Observer
随意提问和祝你好运!