【学习笔记】C++下的单一职责原则(程杰-大话设计模式)

0.引入:

大鸟和小菜在小区楼下遛弯,小菜很开心的向大鸟展示自己的新手机,炫耀有多少种功能。突然,空中出现了一个UFO,大鸟催促小菜赶快拍下来。无奈手机功能过多,加上新手机不熟悉,小菜一阵手忙脚乱,还好还是拍到了UFO。但是满心欢喜回家一看,拍摄的一点也不清晰,没有说服力。大鸟开导小菜,如果你手中的是一台专业录像的录像机,画质一定好很多。

这就引出了单一职责原则。


1.单一职责原则:

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

2.方块游戏的设计

再用俄罗斯方块游戏进行举例。开发一款俄罗斯方块游戏,完全可以将界面、游戏逻辑完全写在一个类之内。但是这样带来的问题,如果需要将游戏移植在不同的平台,就需要完全重写一边,工作量很大。

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

而俄罗斯方块游戏,游戏逻辑可以和界面职责进行剥离。

就游戏逻辑而言,假如开发俄罗斯方块是在一个10*20的矩形内进行游戏

那么完全可以用一个二维数组(x,y)来表示每一个图形的位置。方块的下落和移动,就是二维数组下标的变化。假如原方块在(3,5)位置,下移就会变成(3,6),如果下移过程中还按下了左键,方块坐标就会变为(2,6)。而用数组的值f(x,y)为0,1分别表示(x,y)位置不存在方块和存在方块。对于边界的判定,假如(x,y)中,x-1<0或x+1>10则表示方块撞墙了。而对于碰撞判断,如果f(x-1,y) = 1,则表示当前方块的左侧存在方块。而对于是否需要消除的判断,通过遍历x由0到9,如果f(x,y)均等于1,则表示改行需要消除,即将改行的f(x,y)置0。

界面逻辑,是根据数组的数据进行绘制与擦除,或者根据键盘命令调用数组的相应方法进行改变。

因此俄罗斯方块至少应该分为2个类,即游戏逻辑类和界面类。

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

如何判断是否需要分离?如果你能想到多余一个的动机去改变一个类,那么这个类就具有多于一个的职责,就应该考虑类的职责分离。

参考资料:《大话设计模式》,作者:程杰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值