SOLID (Object Oriented Design)

85

Single responsibility principle - 一个类只负责一个职责,每个需求的更改都可以通过只更改一个类完成。

Open / closed principle - 软件实体(类/模块/函数)应该对扩展是开放的,对更改是封闭的(对程序的改动,应该通过拓展来实现变化,而不是修改已有代码)。

Liskov substitution principle - 所有引用基类的地方必须能透明地使用其子类的对象。

  • 替换的前提是面向对象语言支持的多态特性。

  • 与期望行为一致的替换:将接口或基类的方法看作是一种“契约”,使用方按照这个契约来使用,派生类也按照这个契约来实现。

  • 在进行设计时,关注模型概念的同时还要从行为出发进行考虑,使得在不需要了解具体派生类的情况下,即可清楚的知道方法的行为;基于契约设计,这个契约即是基类方法签名、功能描述、参数类型、返回值等。在实现派生类时,要保持与基类的契约不被破坏。

Interface segregation principle - 客户端不应该依赖它不需要的接口,类间的依赖关系应该建立在最小接口之上(适度细化接口,以提高内聚)。

Dependency inversion principle - 高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象(在设计时,应该先定义接口或抽象类,使得修改具体实现时不需要改变抽象,实现松耦合)。