單一職責原則:一個類應當只有一個引起它變更的原因。換句話說,一個類、介面或模組只負責一項職責。
如果一個類承擔多重職責(如同時處理業務屬性與業務邏輯),修改某一功能時極易引入 Bug 影響其他功能。遵循 SRP 可實現:
開發中常見錯誤:將用戶屬性(身高、體重)與用戶行為(吃飯、上網)定義在同一介面 Itutu 中:
public interface Itutu {
// 業務對象屬性
void setShengao(double height);
double getShengao();
void setTizhong(double weight);
double getTizhong();
// 業務邏輯行為
boolean chiFan(boolean hungry);
boolean shangWang(boolean silly);
}
此介面職責模糊,既非純粹的數據對象 (BO),也非純粹的邏輯處理 (BL),違反 SRP。
將介面拆分為兩個單一職責介面:
public interface ItutuBO {
void setShengao(double height);
double getShengao();
void setTizhong(double weight);
double getTizhong();
}
public interface ItutuBL {
boolean chiFan(boolean hungry);
boolean shangWang(boolean silly);
}
public class TutuBO implements ItutuBO {
private double height;
private double weight;
// 實現屬性 getter/setter...
}
public class TutuBL implements ItutuBL {
@Override
public boolean chiFan(boolean hungry) {
if (hungry) { System.out.println("去吃火鍋..."); return true; }
return false;
}
@Override
public boolean shangWang(boolean silly) {
if (silly) { System.out.println("好無聊啊,上會網..."); return true; }
return false;
}
}
修改屬性時只動 ItutuBO/TutuBO,修改邏輯時只動 ItutuBL/TutuBL,互不干擾。
SRP 是設計模式的基石。介面設計務必單一職責,實現類設計儘量單一職責。實際開發中憑經驗判斷變更原因,在「職責清晰」與「類數量可控」間尋找平衡點。