单一职责原因

单一职责原则,就一个类而言,应该仅有一个引起它变化的原因。

现在比如说要写一个俄罗斯方块,怎么能实现功能的代码复用呢?

不管怎么样游戏中的有些东西是始终没有变化的,比如说下落、旋转、碰撞判断、移动、堆积这些游戏的逻辑是没有变化的。这些都是和游戏有关的逻辑,和界面如何没有什么关系。

如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,设计会遭受到意向不到的破坏。

软件设计真正要做的许多的内容就是发现职责,并把那些职责相互分离。

下面就写一个完整的俄罗斯方块的游戏:

第一步:游戏逻辑分析

方块的可移动区域,可以设计为一个二维整型的数组用来表示坐标,比如说宽10高20,则:

int[][] arraySquare = new int[10][20];

整个方块的移动其实就是数组下标的变化,比如说原方块在arraySquare[3][5]上,则下移时就变成arraySquare[3][6],如果下移的同时还按下了左键,就是arraySquare[2][6]。

每个数组的值就是是否存在方块的标志,存在为1,不存在时缺省为0。

所以碰撞检测:

是否能左移就是判断arraySquare[x][y]中的x-1是否小于0,否则就碰撞了。或者arraySquare[x-1][y]是否等于1,否则就说明左侧有堆积的方块。

所谓堆积,不过是判断arraySquare[x][y+1]是否等于1的过程,如果是则将自己arraySquare[x][y]的值修改为1。

那么消层,就是arraySquare[x][y]中循环由0到9,判断arraySquare[x][y]是否都等于1,是则次行数据清零,并将其上方的数组值遍历下移一位。

所谓游戏逻辑,不过是数组的每一项值变化的问题,下落、旋转、碰撞检测、移动、堆积这些都是在做数组具体项的值的变化。

而这部分游戏的逻辑,代码是可以复用的。

[未完,待续……]

时间: 2024-08-03 16:12:32

单一职责原因的相关文章

面向对象设计原则之一:单一职责原则

单一职责原则(Single Responsibility Principle SRP) There should never be more than one reason for a class to change. 什么意思呢? 所谓单一职责原则就是一个类只负责一个职责,只有一个引起变化的原因. 如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化会削弱或抑制这个类完成其他职责的能力,这个耦合会脆弱的设计. 软件设计真正要做的许多内容,就是发现职责并把这些职责相互分离:如果能

大话设计模式第三章之单一职责原则

单一职责原则指的是就一个类而言,应该仅有一个引起它变化的原因. 如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能削弱或者抑制这个类完成其它职责的能力(就像一个程序员  叫他去做医学研究,生物研究,可能会抑制他学设计模式的能力).这种耦合会导致脆弱的设计,当变化发生时,设计会遭到异常不到的破坏(你医学研究久了,设计模式少接触,也就生疏了). 在写一个类的时候,要在类的职责分离上多思考(类的职责搞不清楚,就好像你生病了去找修车的,买菜去学校买),这样代码才是真正的可维护,易扩

【设计模式之禅】第1章 单一职责原则

1.1 我是"牛"类,我可以担任多职吗 SRP 单一职责原则的英文名称是Single Responsibility Principle,简称是SRP. RBAC模型(Role-Based Access Control)基于角色的访问控制        通过分配和取消角色来完成用户权限的授予和取消,使动作主体(用户)与资源的行为(权限)分离 单一职责原则的定义是:应该有且仅有一个原因引起类的变更. 1.2 绝杀技,打破你的传统思维 SRP的原话解释是:        There shou

设计模式.设计原则-单一职责原则

1:什么情况下 会使用到单一职责原则设计模式? 当同一个类中同时出现业务和属性等代码的时候或者当同一个类中要做多样事情的时候,就需要将其抽象出来,做成多种不同的接口,以便后续方便扩展单一职责:原则要求一个接口或者类只有一个原因引起变化,也就是一个接口或者类只有一个职责,它就负责一件事情 单一原则的好处:类的复杂性降低,实现责任清晰明确可读性高,复杂性降低可维护性提高,可读性提高变更引起风险性降低,变更是必不可少的,如果接口修改,只影响对应的实现类,对其他接口没有影响 如上图所示:Perion类这

敏捷软件开发 – SRP 单一职责原则

SRP:单一职责原则  一个类应该只有一个发生变化的原因. 为何把两个职责分离到单独的类中很重要呢?因为每一个职责都有变化的一个轴线.当需求变化时,该变化会反映为类的职责的变化.如果一个类承担了多于一个的职责,那么引起它变化的原因就会有多个. 如果一个类承担的职责过多,就等于把这些职责耦合在了一起.一个职责发生变化可能会削弱或抑制这个类完成其他职责的能力.这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏. 有两个不同的应用程序使用Rectangle类.一个应用程序是有关计算几何

设计模式之禅单一职责原则

个人blog 此篇博文地址 :http://www.sanyinchenblog.com/?p=150 最近在看<<设计模式之禅>>感觉这本书很是不错的,demo虽然简单但是确实很明了,感觉很有必要自己再敲一遍 单一职责原则 demo: https://github.com/sanyinchen/UMLDemo 如果一个类有多于一个的动机被改变,那么这个类就具有多于一个的职责.而单一职责原则就是指一个类或者模块应该有且只有一个改变的原因. demo:一个手机类:Iphone.需要用

C#设计模式系列:单一职责原则(Single Responsibility Principle)

1.单一职责原则的核心思想 一个类应该有且只有一个变化的原因. 2.为什么要引入单一职责原则 单一职责原则将不同的职责分离到单独的类,每一个职责都是一个变化的中心.当需求变化时,这个变化将通过更改职责相关的类来体现.如果一个类拥有多于一个的职责,则这些职责就耦合到在了一起,那么就会有多于一个原因来导致这个类的变化.对于某一职责的更改可能会损害类满足其他耦合职责的能力.这样职责的耦合会导致设计的脆弱,以至于当职责发生更改时产生无法预期的破坏. 3.单一职责原则的优点 1>.可以降低类的复杂度,一个

C语言的设计模式-单一职责

C语言的设计模式-单一职责 单一职责原则: 通常的定义是只专注于做一件事和仅有一个引起它变化的原因.对于接口.实现.函数级别往往我们比较容易关注单一职责,大家谈的也比较多,但对于返回值.参数可能不会有太多的人关注.但往往就是这些不符合单一职责原则的设计可能导致一些很难发现的BUG.看看下面这段代码: pBuf = (byte*)realloc( pBuf, size); if( pbBuf != NULL ) { TODO... } 可能很多人一眼看上去并没有什么问题,先让我们看看这个库函数的定

单一职责原则

什么是单一职责原则 什么是单一职责原则? 单一职责原则的英文名称是Single Responsibility Principle,简称SRP.SRP的原话解释是:There should never be more than one reason for a class to change. 也就是说一个类,只有一个引起它变化的原因.应该只有一个职责.每一个职责都是变化的一个轴线,如果一个类有一个以上的职责,这些职责就耦合在了一起. 这会导致脆弱的设计.当一个职责发生变化时,可能会影响其它的职责