软件设计中的基本共识:
1,高内聚,低耦合:如果想使软件系统架构稳定,那么我们期望软件的各模块内元素结合的紧密,而模块之间的耦合度(关联性)越低越好。高内聚不仅体现在模块上,单独的类或方法也应该是内聚的。
2,面向抽象编程:面向过程开发中,上层组件调用下层组件,这意味着当下层发生剧烈变化时候,上层组件也得跟着一起变化,增加了维护成本。面向对象的设计中,我们努力使程序依赖抽象,而不去依赖具体实现,首先依赖抽象降低了模块间实现细节的耦合度,其次抽象变化的概率比较小,修改具体实现不影响其他模块,降低了风险成本,提升了软件结构的健壮性。
3,多用组合少用继承:组合和继承都是对已有属性和功能的复用,继承偏向于扩展,组合偏向于使用。组合的好处在于其方式更加灵活,不会对类造成危害,不会造成膨胀,同时减少了对父类的依赖。少用继承而不是不用继承,使用继承结构的代码可读性更高,一般认为继承结构不应该超过四层,而且应该谨慎的使用修饰符。
4,开闭原则:软件设计中主张“对扩展发放,对修改关闭”,该原则倡导我们对软件实体进行扩展时,尽量不要去修改原有的软件实体进行修改。
对以上共识具体化和规范化就有了设计模式的六大原则:
1,开闭原则:一个软件实体应该对扩展开放,对修改关闭。
2,单一职责原则:一个类应该应该只有一个引起他变化的原因。
3,依赖倒置原则:要依赖要抽象,而不是依赖具体实现。
4,接口隔离原则:使用多个隔离的接口,分离不同的接口行为,也就是说一个类对另外类的依赖性应该建立在最小接口上。
5,里氏替换原则:继承必须保证基类所拥有的性质在子类中仍然成立,即子类应当替换任何基类能够出现的地方。
6,迪米特法则:只和密友交谈。即一个软件实体应该尽可能少的于其他实体发生相互作用。