一、SRP:單一職責原則
SRP即Single Responsibility Principle,指的是每個類都應該只有一個單一的職責。類的職責應該盡量簡單明了,如果一個類承擔的職責過多會影響代碼的封裝性、可讀性和可維護性。
例如,一個員工類需要完成列印工資條和計算員工績效這兩個職責,可以將這兩個職責拆分為兩個類:列印工資條類和員工績效類。這樣可以降低類的複雜度,增加類的可復用性和靈活性。
class PrintSalary {
public void print() {
// 列印工資條
}
}
class EmployeePerformance {
public double calculatePerformance() {
// 計算員工績效
}
}
二、OCP:開閉原則
OCP即Open-Closed Principle,指的是系統中的類、模塊、函數等應該對擴展開放,對修改關閉。其實就是要求我們盡量使用繼承、介面等方式,盡量不去修改原有的代碼。
例如,現在有一個手機類,支持發簡訊、打電話、拍照等功能。那麼為了實現新增功能,可以通過繼承來實現,不用修改原手機類中的代碼。
class MobilePhone {
public void call() {
// 打電話
}
public void sendSMS() {
// 發簡訊
}
public void takePhoto() {
// 拍照
}
}
class NewMobilePhone extends MobilePhone {
public void playGame() {
// 手機新增玩遊戲功能
}
}
三、LSP:里氏替換原則
LSP即Liskov Substitution Principle,指的是子類可以替換其父類在任何場景下,程序的行為都應該保持不變。也就是說,在程序中使用基類對象的地方,如果用子類對象代替,程序的行為不應該受到影響。
例如,現在有一個鳥類的基類,其中有一個叫聲的方法。那麼替換成子類烏鴉時,在運行時也應該輸出「哇哇」這個叫聲。
class Bird {
public void cry() {
// 鳥的叫聲
System.out.println("嘰嘰喳喳");
}
}
class Crow extends Bird {
public void cry() {
// 烏鴉的叫聲
System.out.println("哇哇");
}
}
四、ISP:介面隔離原則
ISP即Interface Segregation Principle,指的是客戶端不應該依賴它不需要的介面。一個類對另一個類的依賴應該建立在最小的介面上。
例如,現在有一個動物類,但是其中有一些不是所有動物都有的方法,如羊有毛而魚沒有,但是Animal中卻有毛的方法。所以需要在類中設計介面,減少無用的介面。
interface Animal {
void eat();
}
interface Swim {
void swim();
}
interface Wool {
void wool();
}
class Sheep implements Animal, Wool {
public void eat() {
System.out.println("羊吃草");
}
public void wool() {
System.out.println("羊有毛");
}
}
class Fish implements Animal, Swim {
public void eat() {
System.out.println("魚吃水草");
}
public void swim() {
System.out.println("魚會游泳");
}
}
五、DIP:依賴倒置原則
DIP即Dependency Inversion Principle,指的是高層模塊不應該依賴低層模塊,而是應該通過抽象來進行依賴。
例如,現在有一個學生類和成績類,如果對學生進行操作,就需要依賴成績類。那麼我們就可以通過介面或抽象類等方式進行依賴。
interface IScore {
public void setScore(Student stu);
}
class Student {
private String name;
public Student(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
class Score implements IScore {
public void setScore(Student stu) {
System.out.println(stu.getName() + "的成績是90分");
}
}
class StudentManager {
private IScore score;
public StudentManager(IScore score) {
this.score = score;
}
public void setScore(Student stu) {
score.setScore(stu);
}
}
原創文章,作者:YJZK,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/136427.html