1. 開閉原則
一個類或者接口最好是可以進行擴充和引用,所謂的開閉就是針對功能擴充和修改而言。 提高可複用性和可維護性。
ex:以java課程價格和活動打折為例。
- 課程
public interface ICourse {
Integer getId();
String getName();
Double getPrice();
}
- java課程
public class JavaCourse implements ICourse {
private Integer id;
private String name;
private Double price;
public JavaCourse(Integer id, String name, Double price) {
this.id = id;
this.name = name;
this.price = price;
}
@Override
public Integer getId() {
return this.id;
}
@Override
public String getName() {
return this.name;
}
@Override
public Double getPrice() {
return this.price;
}
}```
- java活動課程
public class JavaDiscountCourse extends JavaCourse {
public JavaDiscountCourse(Integer id, String name, Double price) {
super(id, name, price);
}
public Double getOriginJavaPrice() {
return super.getPrice();
}
public Double getDiscountJavaPrice() {
return super.getPrice()*0.8;
}
}
2.依賴倒置原則
高層子產品不應依賴底層,二者都應依賴其抽象,針對接口程式設計,。提高可複用性解耦性。Spring中的依賴注入。
ex:
public interface ICourseStudy {
void study();
}
public class JavaCourse implements ICourseStudy{
@Override
public void study() {
System.out.println("tom正在學習");
}
}
public class Tom {
private ICourseStudy courseStudy;
public void setCourseStudy(ICourseStudy courseStudy) {
this.courseStudy = courseStudy;
}
public void study() {
courseStudy.study();
}
}
對于tom來講,學習另外的課程并不需要每次都自己去實作,僅僅是通過接口去擷取學習的課程而已。對于新的課程,隻需要建立一個類,通過傳 參的方式告訴 Tom,而不需要修改底層代碼。
3.接口功能隔離原則:、建立單一接口,不要建立龐大臃腫的接口。高倍局,低耦合
4.接口職責單一:接口的功能最好單一化,友善維護。
5.迪米特法則
最少知道原則,隻和朋友交流。朋友:成員變量,方法輸出,輸入中的變量。方法内不不是朋友。
7裡氏替換原則
子類可以擴充父類的功能,但不能改變父類原有的功能。
1、子類可以實作父類的抽象方法,但不能覆寫父類的非抽象方法。
2、子類中可以增加自己特有的方法。
3、當子類的方法重載父類的方法時,方法的前置條件(即方法的輸入/入參)要比父類方法的輸入 參數更寬松。
4、當子類的方法實作父類的方法時(重寫/重載或實作抽象方法),方法的後置條件(即方法的輸 出/傳回值)要比父類更嚴格或相等。
7.合成複用原則