单一职责原则:编程
就一个类而言,应该仅有一个引发他变化的缘由。spa
目的是为了尽量的解耦。接口
例子:产品
若是是一个鸟类,应该只有鸟的变化是改变这个类的缘由,天气和猪的变化不该该是改变这个类的缘由;扩展
若是是一个鸟的脚类,应该只有鸟的脚的变化是改变这个类的缘由,鸟的嘴和猪的变化不该该是改变这个类的缘由;程序
开放-封闭原则:客户端
对扩展开放,对修改封闭。co
目的是为了程序能尽量无限扩展,而不是仅仅改变。background
然而对程序中的每一个部分都刻意抽象是更糟糕的想法,请记住,拒毫不成熟的抽象和抽象自己同样重要。工厂模式
例子:
当初老子只生产苹果:客户端-苹果类
后来二笔产品要老子同时生产草莓,老子当即抽象这个变化:客户端-水果类 苹果子类 草莓子类,并机制的使用工厂模式封装子类产品。
依赖倒转原则:
模块之间不该该互相依赖,它们都应该依赖抽象;抽象不该该依赖细节,细节应该依赖抽象。
即针对接口编程,具体一点就是接口类或抽象类。程序中的依赖关系都应该终止于抽象类或者接口。
里氏代换原则:
子类必须能替换掉它们的父类。程序中用子类代替父类,程序的行为应该是没有变化的。
这要求子类具有父类的全部行为和特征。
例子:
想一想策略模式,客户端只依赖context接口和策略抽象类,具体策略实现和客户端不要紧;具体策略类只依赖并实现策略抽象类,具体客户端怎么使用也和具体策略类不要紧。