定义:就一个类而言,应该仅有一个引发他变化的缘由。设计
若是一个类的职责太多,就等于把这些职责耦合到一块儿。一个职责的变化,可能会消弱或抑制这个类完成其余职责的能力。这种耦合会致使脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏。对象
软件设计真正要作的许多内容就是发现职责并把职责分离,若是你可以想到多余一个的动机去改变一个类,那么这个类就具备多余一个的职责。接口
软件实体能够扩展,可是不能够修改。基础
在最初编写代码时,先假设变化不会发生。当发生变化后,咱们就建立抽象来隔离之后可能发生同类的变化。扩展
面对需求,程序的改动是经过增长新代码进行的,而不是更改现有的代码。软件
拒毫不成熟的抽象和抽象自己同样重要。程序
一、高层模块和底层模块都应该依赖抽象。底层
二、细节也依赖抽象。
子类可以替换父类型。
只有当子类能够替换掉父类,软件单位功能不受影响时,父类才能正真的被复用,而子类也能在父类的基础上正价新的行为。
因为子类型的可替换性才使得使用父类类型的模块在无需修改的状况下就能够扩展。
程序中全部的依赖关系都是终止于抽象类或者接口,就是面向对象的设计。