一、松耦合高内聚
代码耦合:一个软件结构内不同模块之间互连程度的度量(耦合性也叫块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差,模块间耦合的高低取决于模块间接口的复杂性,调用的方式以及传递的信息。)
软件工程规定写代码的原则是“高内聚,低耦合”。内聚是代码块间的独立性,耦合是各个代码块间的联系。
对于低耦合,粗浅的理解是:一个完整的系统,模块与模块之间,尽可能的使其独立存在。也就是说,让每个模块,尽可能的独立完成某个特定的子功能。模块与模块之间的接口,尽量的少而简单。
代码内聚就是一个模块内各个元素彼此结合的紧密程度,高内聚就是一个模块内各个元素彼此结合的紧密程度高。所谓高内聚是指一个软件模块是由相关性很强的代码组成,只负责一项任务,也就是常说的单一责任原则。如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。(大话设计模式33页俄罗斯方块的例子很经典哦)
高内聚,低耦合的系统有什么好处呢?事实上,短期来看,并没有很明显的好处,甚至短期内会影响系统的开发进度,因为高内聚,低耦合的系统对开发设计人员提出了更高的要求。长期来看,低耦合的模块便于进行单元测试,且便于维护。
二、开放-封闭原则
开放封闭原则:软件实体(类、模块、函数等等)应该可以扩展,但是不可修改。
在我们最初编写代码时,假设变化不会发生。当变化发生时,我们就创建抽象来隔离以后发生的同类变化。即面对需求,对程序的改动是通过增加新代码进行的,而不是更改现有的代码。开放-封闭原则是面向对象设计的核心所在。开发人员应该仅对程序中呈现出频繁变化的那些部分作出抽象。
三、里氏代换原则
里氏代换原则:子类型必须能够替换掉它们的父类型。即在软件里面,把父类都替换成它的子类,程序的行为没有变化。由于子类型可以替换父类型,可以在模块中使用父类型,当需要扩展时,使用父类型的模块就无需修改便可扩展。
四、依赖倒转原则
依赖倒转原则:1、高层模块不应该依赖低层模块。两个都应该依赖抽象。2、抽象不应该依赖细节。细节应该依赖抽象。
依赖倒转原则就是说要针对接口编程,不要对实现编程。依赖倒转原则是面向对象设计的标志,如果编写时考虑的都是如何针对抽象编程而不是针对细节编程,即程序中所有的依赖关系都是终止于抽象类或者接口,那就是面向对象的设计,反之就是过程化的设计。