一.开闭原则
解释:对扩展开发,对修改关闭。即要对程序进行扩展时,不能去修改原有代码。
使用方式:使用接口或抽象类,因为其灵活性好,可扩展性强,当需要扩展时,只需要对其进行实现,并不用修改原有代码。
好处:扩展性好,易于维护和升级。
二.里氏代换原则
解释:任何基类可以出现的地方,子类也一定可以出现。
使用方式:除添加新的方法外,尽量不去重写父类的方法。不然当程序比较复杂,使用多态可能会有问题。
三.依赖倒转原则
解释:高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象。就是对抽象进行编程,不对实现进行编程。
简单来说就是抽象类,接口和类中的成员变量尽量都是接口,不是具体类。这样便于扩展。就是开闭原则。
好处:降低耦合,高扩展性。
四.接口隔离原则
客户端不因该被迫依赖于它不使用的方法,一个类对另一个类的依赖应该建立在最小的接口上。
解释:显而易见,这个原则就是当子类依赖于父类的某个方法,但父类中其他的方法子类又不需要时,此时就不能再继承了,而是需要将依赖的那个方法分离出来,单独写成一个接口来实现。
例:有一个接口A,其有两个方法,此时一个类B只需要A中x()这歌方法,如果直接继承,则也需要实现其Y()方法,此时可以将X(),Y()两个方法分别写成两个接口,哪个类需要哪个方法就实现哪个接口。
interface A{
X();
Y();
}
好处:1.降低耦合度,子类与原父类不在紧密的关联。
2.高扩展性,当另一个类也需要某个方法时,可以选择其需要的接口来实现。而不用拥有其不需要的方法。
3.条理清晰。
五.迪米特法则
又叫最少知识原则,只和直接朋友交谈,不和陌生人说话。
解释:如果两个软件实体无需直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发调用。
朋友:当前对象本身,当前对象的成员对象,当前对象所创建的对象,当前对象的方法参数等。这些对象同当前对象存在关联,聚合或组合关系,可以直接访问这些对象的方法。
此原则就是代理。
例:甲方A找一个外包公司设计软件,他是直接找公司B,公司再将需求告诉程序员C,而不是直接找程序员C。
此时朋友就是程序员与公司,陌生人是甲方。
//甲方
class A{
A(){}
}
//公司(产品经理)
class B{
A a;
C c;
b(){}
}
//程序员
class C{
C(){}
}
好处:降低耦合度。降低了A类与C类之间的耦合度。
六.合成复用原则
解释:尽量先使用组合或者聚合等关系来实现,其次才考虑使用继承关系来实现。
例:汽车按动力可分为“电动”与“汽油”等,按照颜色可分为“黑”,“白”等。不同的动力和颜色价格不同。
这里使用的是聚合,比继承条例更加清晰。
好处:1.维持了类的封装性。继承的话子类能看到父类中的细节,组合或聚合不会.
2.对象间的耦合度低。父类的改变都会导致子类的实现发生变化,不利于子类维护。