单一职责原则 单一职责原则,The Single Responsibility Principle,简称 SRP,是指就一个类而言,应该仅有一个更改它的原因。也即这个类只有一个职责。 使用动机 若不遵守单一职责原则,即一个类有一个以上的职责,则当一个职责发生变化时,可能会影响其他职责,从而影响代码的维护。 如何使用 核心在于职责的分解。需要将相同的职责放到一起,不同的职责分开到不同的类的实现中去。具体来说,对于一个类,如果能想到多于一个的动机去改变一个类,那么该类具有多于一个的职责,应该考虑将类的职责分解。 使用原则 每一个类实现的职责有清晰明确的定义。 一个类的修改只对自身有影响,对其他类没有影响。 使用示例 以一个俄罗斯方块游戏为例。
单一职责原则,The Single Responsibility Principle,简称 SRP,是指就一个类而言,应该仅有一个更改它的原因。也即这个类只有一个职责。
使用动机
若不遵守单一职责原则,即一个类有一个以上的职责,则当一个职责发生变化时,可能会影响其他职责,从而影响代码的维护。
如何使用
核心在于职责的分解。需要将相同的职责放到一起,不同的职责分开到不同的类的实现中去。具体来说,对于一个类,如果能想到多于一个的动机去改变一个类,那么该类具有多于一个的职责,应该考虑将类的职责分解。
使用原则
使用示例
以一个俄罗斯方块游戏为例。
最直观的想法是,用一个计时器控制动画,每一个计时器编写绘制和擦除方块的逻辑,模拟下落时方块形状的变化,再做一个堆积和消层的判断,最后提供键盘控制逻辑。
假设我们一开始做的是 Web 游戏,游戏效果不错后需要增加 3D 版、手机版等。此时,相对变化的只有方块的样式,但由于我们的代码都在一块,导致其他不变的逻辑没法复用。这就是职责过多的情况,接下来考虑如何将职责分解。
最简单的方法就是将变化的和相对不变的部分分开,也就是将游戏的逻辑(不变的部分)和界面的展示(易变的部分)分开。具体来说,可以将游戏区域设计为二维数组,通过坐标来表示每个方块,实际显示出的方块就是坐标值为 1 的方块。这样,就可以通过值为 1 的坐标的变化模拟出方块的堆积和变换。也就是说,游戏的操作和判断逻辑(如变换、移动、堆积、消层等)其实就是坐标值的变化。界面的展示只是根据数组数据进行绘制。