“给马一个规则,让它只能走日”设计模式

在我心里,面向对象应该是这样的:

“给马一个规则,让它只能走日”设计模式

而MVVM看上去是将方法从VC分离出来,但是并没有这种感觉,所以我就尝试用我想要的方式写了一个象棋棋子“马”,我称这种设计模式为“给马一个规则,让它只能走日”设计模式.

讲之前先说一下WWeChat,其实更新了,只是没写讲解…改动的还是挺多的,代码在这里.


效果图:

Chess.gif

下面讲我这种设计模式(如果你有建议,欢迎指出!)

  • 首先我创建了一个UIButtom,名字是Chess

    顾名思义,这个类是所有棋子的父类

.h

.m

通过这些代码,棋子获得了被拿起、放下以及分红方、黑方的能力.

  • 然后给它创建一个类别Chess+Move

让棋子获得任意移动的能力,不写在Chess里面,而是写到Chess+Move里面,我感觉更符合面向对象。

  • 现在Chess已经可以了,现在创建一个马

    创建Chess的子类House,获得棋子的基本能力,

  • 创建House+rule,让马只能走日的规则
  • 创建棋盘UIView类的Map

.h

.m

这里看看就行了,就是画线。

  • 走马

    Map中创建一个点击事件

整个项目我都用了一个方法来避开复杂的位置计算,将虚拟的棋盘,化成一部分一部分,根据行、列来确定棋子位置.


总结

可以看出,我在这里通过类别和继承来使一个Button变成了一个只能走日的棋子“马”,这样的模式,我感觉更符合面向对象的思想.
做其他棋子也会非常简单,只需要再创建属于其他棋子的类别(规则)就行了。
还是那句话!有建议欢迎指出,大家一起讨论!

原文地址:https://www.cnblogs.com/bigshow1949/p/6343933.html