1.单一原则。一个类应该有且只有一个变化的缘由。单一职责原则将不一样的职责分离到单独的类,每个职责都是一个变化的中心。需求变化时,将经过更改职责相关的类来体现。若是一个类拥有多于一个的职责,则多个职责耦合在一块儿,会有多于一个缘由来致使这个类发生变化。一个职责的变化可能会影响到其余的职责,另外,把多个职责耦合在一块儿,影响复用性。编程
2.里氏替换原则,就是要求继承是严格的is-a关系。全部引用基类的地方必须能透明地使用其子类的对象。在软件中将一个基类对象替换成它的子类对象,程序将不会产生任何错误和异常,反过来则不成立,若是一个软件实体使用的是一个子类对象的话,那么它不必定可以使用基类对象。例如:我喜欢动物,那我必定喜欢狗,由于狗是动物的子类;可是我喜欢狗,不能据此判定我喜欢动物,由于我并不喜欢老鼠,虽然它也是动物。设计模式
3.依赖倒置原则。依赖倒置原则的核心就是要咱们面向接口编程,理解了面向接口编程,也就理解了依赖倒置。低层模块尽可能都要有抽象类或接口,或者二者都有。变量的声明类型尽可能是抽象类或接口。ide
4.接口分离原则。一个类对另外一个类的依赖应该创建在最小的接口上,通俗的讲就是须要什么就提供什么,不须要的就不要提供。接口中的方法应该尽可能少,不要使接口过于臃肿,不要有不少不相关的逻辑方法。测试
5.多用组合(has-a),少用继承(is-a)。若是新对象的某些功能在别的已经建立好的对象里面已经实现,那么应当尽可能使用别的对象提供的功能,使之成为新对象的一部分,而不要再从新建立。能够下降类与类之间的耦合程度。设计
6.开闭原则。对修改关闭,对扩展开放。在软件的生命周期内,由于变化,升级和维护等缘由须要对软件原有代码进行修改,可能会给旧代码引入错误,也有可能会使咱们不得不对整个功能进行重构,而且须要原有代码通过从新测试。解决方案:当软件须要变化时,尽可能经过扩展软件实体的行为来实现变化,而不是经过修改已有的代码来实现。不过这要求,咱们要对需求的变动有前瞻性和预见性。其实只要遵循前面5中设计模式,设计出来的软件就是符合开闭原则的。对象