面向对象设计的基本原则 -- 周总结
避免程序设计和代码设计的坏味道,面向对象设计的基本原则可以很好的帮我们处理这些问题,设计出合理的程序和代码。
开闭原则:对修改关闭,对新增开放
对修改关闭,那怎么修改需求,添加功能呢? 就是通过新增!
映射到代码上就是对原有逻辑类的修改狙击,把新逻辑添加到新的类中
比如以下的策略模式+工厂模式的例子,可以完全消灭if else,完全消灭修改,只需要新增新的算法类
依赖倒置原则:高层不依赖于低层,而是大家都依赖于抽象接口
以下图片可以说明,我们平时使用的service依赖DAO,就是一种高层依赖低层的做法,当低层需要做替换时,就难以实现,必须高层和低层关联修改,代码耦合度高。
下图的思路就是,高层不依赖于低层实现,高层定义接口,低层依赖接口去实现
里氏替换原则:任何基类可以出现的地方,子类一定可以出现,就是任何地方,子类可以替换父类。
因为继承带来的侵入性,增加了耦合性,也降低了代码灵活性,父类修改代码,子类也会受到影响,此时就需要里氏替换原则。
经典的例子就是长方形和正方形,子类不能替换父类,这是一种违反里氏替换原则的例子。
单一职责原则:每一个类的功能尽量单一,一个类只有一个引起它变化的原因。
如果违反这个原则,程序会变得:
脆弱性 :把绘图和计算功能耦合在一起,当修改其中一个时,另一个功能可能会意外受损。
不可移植性 : 计算几何应用只需要使用“计算面积”的功能,却不得不包含GUI的依赖。
接口分离原则:不应该强迫客户依赖他们不需要的方法
如下类图,假如客户端直接依赖cache类,则他会拥有rebuild方法,但是这个方法他们不需要,也不应该对他们开放,当客户端误操作此方法时,则会造成缓存失效。
所以要分离这个类中的方法到两个接口中,保证客户端只看到他需要的方法,避免混乱和开发失误。
本周架构师训练营的面向对象设计的基本原则,是一个值得重复学习,不断回味的问题,遵循这些原则,可以是我们设计出合理的程序,作为架构师更加是不可或缺哦。
版权声明: 本文为 InfoQ 作者【独孤魂】的原创文章。
原文链接:【http://xie.infoq.cn/article/39eabef0c44da85d6e7943399】。未经作者许可,禁止转载。
评论