单一职责原则:
单一职责原则的定义是就一个类而言,应该仅有一个引起他变化的原因。也就是说一个类应该只负责一件事情。
比如:我们在写一个简单画图板时,一般把画图板界面与画图板上的监听器分成两个类去完成。这样的好处比如我们只想改变画图板界面时,监听器类就可以直接调用,不必重新编写。可以降低类的复杂性,提高类的可读性和系统的维护性。
开闭原则:
开闭原则的定义是软件中的对象(类,模块,函数等)应该对于扩展是开放的,但是对于修改是关闭的。
比如对person父类中有很多方法,但想在增加study的方法时,不要直接在父类中修改,可以在student子类中扩展study方法。这样可以提高方法的复用性和系统的维护性。
里氏替换原则:
里氏替换原则定义是如果对每一个类型为T1的对象o1,都有类型为T2的对象o2,使得以T1定义的所有程序P在所有对象o1都替换成o2的时候,程序P的行为都没有发生变化,那么类型T2是类型T1的子类型。
简单来说就是子类可以扩展父类功能,但是不能改变其原有的功能。可以有以下这些理解:
- 子类可以实现父类的抽象方法,但是不能覆盖父类的非抽象方法。
- 子类可以增加自己独有的方法。
- 当子类的方法重载父类的方法时候,方法的形参要比父类的方法的输入参数更加宽松。
- 当子类的方法实现父类的抽象方法时,方法的返回值要比父类更严格。
依赖倒置原则:
依赖倒置原则(Dependence Inversion Principle,DIP),原始定义包含三层含义:高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节;细节应该依赖抽象。
比如:有一个奔驰类,在person类中调用其方法可以实现驾驶奔驰,但却无法驾驶宝马,所以最好的办法是写一个汽车接口,这样可以让不同品牌的汽车来实现它,person类中就可以通过调用实现好的类来驾驶不同汽车。
接口隔离原则:
接口隔离原则的定义是客户端不应该依赖他不需要的接口。
比如:一个work接口中有teach和study两个抽象方法,而对于teacher来说只用teach方法,却也要把study方法实现一遍,这样代码就会冗余,并增加程序运行负担,因此应该把teach和study方法分别写成两个接口。这样可以提高代码的灵活性。
迪米特原则:
迪米特原则也被称为最小知识原则,他的定义一个对象应该对其他对象保持最小的了解。简单的理解就是高内聚,低耦合,一个类尽量减少对其他对象的依赖,并且这个类的方法和属性能用私有的就尽量私有化.
以上原则要根据实际情况而具体把握,比如方向接口不能因为某个程序可能只使用一个程序而为每一个方向都写一个接口,那样反而会更加麻烦。