前提:如何判别一个模式的好坏,六个原则评委不能少,是否清楚知道由哪六位构成,又是否真的理解判别规则吗?一切都不用担心,先明原则,不断进步!
六原则
单一职责原则
单一职责:就一个类而言,应该仅有一个引起它变化的原因。
解释:如果一个类承担的职责过多,所有的职责都联系在一起,一个变化就可能造成这个类无法完成其他职责。软件设计就是发现职责相互分离,一个类只完成一个职责。如果有多于一个动机去改变这个类,那么就该继续对这个类继续分离。
实例:以公司职员为例,如果一位员工同时担任多为职位,既是人力资源部的又是设计部门的,当员工选择离职时,两个部门都需要受到影响,一个部门的影响可能不是特别严重,但是要是多个部门同时受到影响,那么公司造成的损失一定非常严重!所以公司里基本上不存在一位员工同时处于两个部门甚至多个部门,应用于软件设计上一样,避免一类中修改一点而造成其他的无法使用的这种情况的发生。
开放——封闭原则
开放——封闭原则:软件实体(类、模块、函数)应该扩展,但是不能修改。
无论模块是多么“封闭”,都会存在一些无法对之封闭的变化,但是设计人员必须对于他设计的模块应该有哪种变化封闭做出选择。他必须先猜测出可能发生变化种类,然后构造抽象来隔离那些变化。
解释:对于软件的需求是不断变化,不能因为需求的改变而导致软件的重新制作,这样人力和财力的使用是巨大,而且很浪费资源。为了避免这样事情发生,尝试着在原有软件的基础上,修改推出新的版本。但是如果在旧版本的类中修改,可能造成已开发的功能不能使用,为了避免这样情况,尝试着不修改,但是可以添加。也就是对于扩展开放,对于更改封闭!对于程序的改动是通过增加新代码进行的,而不是更改现有的代码。
实例:平常喜欢听歌,经常使用酷狗音乐播放器。
之前没有蒙面歌王这个节目时,乐库的节目栏如下图
但是有了蒙面歌王这个节目后,在乐库抽象类下不该修改其他的具体类,和客户端,只需要扩展一个新的具体类——蒙面歌王。
里氏代换原则
里氏代换原则:子类型必须能够替换它们的父类型。
解释:一个软件实体如果使用一个父类的话,那么一定使用于其子类,而感觉出来父类对象和子类对象的区别。也就是,父类能完全的被子类替换,程序没有什么改变。只有当子类可以替换父类时,软件单位能不受到影响时,父类才能真正被复用,而子类也能够在父类的基础上增加新的行为。
实例:鸟类和鸵鸟,在面向对象设计时,一个是鸟类,一个是鸵鸟类,如果鸟可以飞,但是鸵鸟不会飞,那么鸵鸟类就不可以继承鸟类了。
但是科学依据鸵鸟也属于鸟类,所以在编写鸟类时,就不能有飞这个方法了。
如果这个原则不能理解欢迎点击进入依赖倒转原则继续学习。
【总结】
上述内容是关于大话设计模式前三个原则的理解,一开始学习的时候感觉挺难,后来多看了几遍,慢慢的就理解了。再结合一些具体的设计模式,反复的思考琢磨,相信一切问题都会迎刃而解!内容持续更新,欢迎进入下一篇【设计模式】——六原则(二)
本人菜鸟一只,若有理解不对之处,请大神们及时指出,不胜感激!