单一原则,开放
读书笔记:大话设计模式
单一职责原则
单一职责原则(SRP):就一个类而言,应该仅有一个引起它变化的原因
例子
一个俄罗斯方块游戏设计思路
- 其中游戏业务逻辑:
数据的每一项值变化的问题,下落,旋转,碰撞判断,移动,堆积这些都是再做数据具体项的值的变化
- 其中界面表示逻辑:
根据数据进行绘出,擦除,根据键盘命令调用具体改变数据值的方法等
假设:
如果把游戏业务逻辑与界面表示逻辑混合耦合成一个类,出现新的需求把当前的PC游戏移植到winCE的移动端上,
基于winForm的页面表示逻辑就无法再使用,由于耦合性导致不变的游戏业务逻辑也无法复用
总结:
- 如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责变化可能会削弱或抑制这个类完成其他职责能力,当发生变化,设计会遭到意向不到的破坏
- 软件设计真正要做的许多内容,就是发现职责并把那些职责互相分离
- 如果你能想到多于一个动机去改变一个类,那么这个类就多于一个职责
开放-封闭原则
开放-封闭原则: 是说软件实体(类,模块,函数等)应该可以扩展,但是不可以修改
- 对于扩展是开放的
- 对于更改是封闭的
- 面对需求,对程序的改动是通过增加代码进行的,而不是改现有代码,是开闭原则精髓
- 无论模块多么封闭都会存在一些无法对之封闭的变化,设计人员必须先猜测出最有可能发生变化的种类,然后构造抽象来隔离那些变化
- 最初编程时,假设不会变化,当变化发生,我们就创建抽象隔离以后发生的同类变化
- 查明可能发生的变化所等待时间越长,要创建正确的抽象就越困难
- 对程序中的每个部分都刻意进行抽象同样不是一个好主意,拒绝不成熟的抽象和抽象本身一样重要
依赖反转原则
依赖反转原则:
A:高层模块不应该依赖底层模块,两个都应该依赖抽象
B:抽象不应该依赖细节,细节应该依赖抽象
依赖反转原则本质就是要针对接口编程,不要对实现编程
依赖接口或抽象类,而不怕更改的原因是因为里氏替换原则
里氏替换原则
在软件里面,把父类都替换成它的子类,程序的行为没有变化,也就是说↓
里氏替换原则(LSP): 子类型必须能够替换掉它们的父类
例子:
尽管生物学分类上,企鹅是一种鸟
但在面向对象设计中,一个鸟类,一个企鹅类,鸟类都可以飞,企鹅不会飞,企鹅不是鸟类,不可以继承鸟
- 只有当子类可以替换掉父类,软件单位的功能不受影响时,父类才能真正被复用,而子类也能够在父类的基础上增加新的行为
- 由于子类型的可替换性才使得父类类型的模块在无需修改的情况下就可以扩展
发布者:admin,转转请注明出处:http://www.yc00.com/news/1693414604a714157.html
评论列表(0条)