0 六大基本原则
开闭原则:一个类应该对修改关闭,对扩展开放。意思在于,不允许修改一个类的代码达到扩展,但是可以通过该类的基类派生出新的类达到扩展。
单一职责原则:一个类应该只有一个职责。意思在于能够引起类变化,也就是类修改的原因只应该有一个。一个类应该尽可能做的小,只包含基本的功能。
接口隔离原则:派生类继承基类,基类应该只包含单一的职责,才会使得派生类不会有无用的功能。其意思是和单一职责原则几乎一样。
里氏代换原则:在需要基类的地方,如果将基类替换为他的派生类,那么程序亦然能够正常运行
依赖倒转原则:A类应该使用一个类的基类作为参数或是关联,这样A类就可以使用该基类或是派生类作为参数或是关联。这几乎就是面向对象中的多态。
迪米特法则:最小知道原则。意思在于一个类只与有限的类发生直接的联系。
合成复用原则:意思在于尽可能使用使用关联,然后进行方法转发,而不是继承。
1 开闭原则
开闭原则,指的是,通过通过派生同一个类的方式,达到功能的扩展。而不是修改其中一个类的方式达到功能的拓展。
2 单一职责原则
每个类所能够做的事情应该尽可能少,只做必要的事情。
一个类承担过多的功能,使得类过于臃肿。而且当只需要类的一部分功能的时候,那么另一部分功能就会变得多余。
3 接口隔离原则
与当一职责原则类似,当一个基类,拥有过多的功能,那么其派生类也就继承了这些过多的功能。
因此需要将接口进行再次分解。也就是说接口隔离原则是从接口的角度来解释单一职责原则
4 里氏代换原则
派生类可以完全的替代基类,那么意味着,基类的方法在派生类可用,因此需要是public继承。
并且派生类不应该掩盖基类的方法,避免派生类中的方法的重载。
在编程中,使用最多的是基类只是个接口,并不会有哪些地方真正的使用到基类的方法,更多的是使用派生类,因此这条原则是对基类提出要求,基类接口的设计应该尽可能的合理,使得派生类能够使用相同的向外提供功能。
开闭原则要求使用新的派生类来扩展功能,而里氏替换原则则要求基类的接口尽可能合理,算的上是开闭原则的一种补充,也就是对基类的要求。
5 迪米特法则
最少知道原则,但是实际上,更合理的名称或是解释,一个类尽可能少的被其他类直接使用。
多数文章里都会提到一个朋友和陌生人的名词,也就是说,能够直接使用A类的类,是A类的朋友,不能直接使用A类的类是A类的陌生人。迪米特法则指的就是一个实际功能类应该尽可能少的有朋友。
其实现,新建一个代理类,实际功能类至于这个代理类通信,而需要调用实际功能类的类,都通过代理类的方法进行转发。
也就是说迪米特法则,要求创建一个代理类来妆发一个实际功能类的方法,加了一层抽象。
6 依赖倒置原则
依赖倒置原则指的是在实际功能类A上面加一层抽象类。因此,当功能扩展的时候,可能出现和A类功能一样的类,这时候其他类只要关联或是使用抽象类,就可以避免修改。
这条原则是开闭原则和里氏替换原则的具体应用。要求使用基类。
7 合成复用原则
因为继承是一种高耦合,为了避免高耦合,使用关联的方式来减少耦合。
也就是说,合成复用原则,与面向对象原则中的继承相背,该原则提议尽可能少的使用继承。
8 总结
这几条原则,总结起来可以理解为:
- 使用抽象层,达到拓展功能
- 使用隔离层,减少与实际功能类的联系
- 使用关联,降低耦合