24设计模式 之 五项设计原则(SOLID)
常说的SOLID五大设计原则指的就是:
S = 单一职责原则 Single Responsibility Principle
O = 开放闭合原则 Opened Closed Principle
L = Liscov替换原则 Liscov Substitution Principle
I = 接口隔离原则 Interface Segregation Principle
D = 依赖倒置原则 Dependency Inversion Principle
具体如下:
1. 单一职责原则
引起类变化的因素永远不要多于一个,或者说:一个类有且只有一个职责。
如果类包含多个职责,代码会变得耦合;SRP看起来是把事物分离成分子部分,以便于能被复用和集中管理,这点也同样适用于方法级别。
2. 开放封闭原则
软件实体(类,模块,函数等)应当对扩展开放,对修改闭合。
(关于对外关联接口或抽象类 )
3.Liskov’s 替换原则
子类型必须能够替换它们基类型,或者说使用基类引用的函数必须能使用继承类的对象而不必知道它。
为什么LSP这么重要:
I. 如果没有LSP,类继承就会混乱;如果子类作为一个参数传递给方法,将会出现未知行为;
II. 如果没有LSP,适用与基类的单元测试将不能成功用于测试子类;
4. 接口分离原则
客户端不应该被迫依赖于它们不用的接口 ;接口应该只包含必要的方法,而不该包含其它的。
比如:
注意到IBird接口包含很多鸟类的行为,包括 fly() 行为.现在如果一个Bird类(如 Ostrich鸵鸟)实现了这个接口,那么它需要实现不必要的 fly() 行为(Ostrich 不会飞)。这个”胖接口”应该拆分未两个不同的接口,IBird和IFlyingBird,IFlyingBird继承自IBird。这里如果一种鸟不会飞(如Ostrich),那它实现IBird接口。如果一种鸟会飞(如 Sparrow麻雀),那么它实现IFlyingBird。
5. 依赖倒置原则
高层模块不应该依赖底层模块,两者都应该依赖其抽象。
比如说一个汽车类,应该依赖于接口,必须写成IEngine eg; :
class Car{
ChinaEnginee eg; // 此处不对
}
如果代码中不用依赖倒置,我们将面临如下风险:
I. 使用低级类会破环高级代码;
II. 当低级类变化时需要很多时间和代价来修改高级代码;
III. 产生低复用的代码;
除此SOLID五项原则外,还有其它的面向对象原则。
例如:
组合替代继承: 相对于继承,要更倾向于使用组合;
笛米特法则: 你的类对其它类知道的越少越好;
共同封闭原则: 相关类应该打包在一起;
稳定抽象原则: 类越稳定,越应该由抽象类组成;;