設計模式的目的
撰寫軟體程序中,程式員面臨著來自 耦合性,內聚性以及可維護性,可擴展性,重用性,靈活性 等多方面的 挑戰,設計模式是為了讓程式(軟體),具有更好
- 代碼重用性 (即:相同功能的代碼,不用多次撰寫)
- 可讀性 (即:編程規范性, 便于其他程式員的閱讀和理解)
- 可擴展性 (即:當需要增加新的功能時,非常的方便,稱為可維護)
- 可靠性 (即:當我們增加新的功能后,對原來的功能沒有影響)
- 使程式呈現高內聚,低耦合的特性
設計模式七大原則
設計模式原則,其實就是程式員在編程時,應當遵守的原則,也是各種設計模式的基礎(即:設計模式為什么 這樣設計的依據)
設計模式常用的七大原則有:
-
單一職責原則
-
介面隔離原則
-
依賴倒轉(倒置)原則
-
里氏替換原則
-
開閉原則
-
迪米特法則
-
合成復用原則
單一職責原則基本介紹
? 對類來說的,即一個類應該只負責一項職責,如類 A 負責兩個不同職責:職責 1,職責 2,當職責 1 需求變更 而改變 A 時,可能造成職責 2 執行錯誤,所以需要將類 A 的粒度分解為 A1,A2
案例(代碼):
package com.atguigu.principle.singleresponsibility;
public class SingleResponsibility1 {
public static void main(String[] args) {
Vehicle vehicle = new Vehicle();
vehicle.run("摩托車");
vehicle.run("汽車");
vehicle.run("飛機");
}
}
class Vehicle {
public void run(String vehicle) {
System.out.println(vehicle + " 在公路上運行....");
}
}
運行結果:

這個代碼違反了單一職責原則,不是優秀的代碼,
改進1:
package com.atguigu.principle.singleresponsibility;
public class SingleResponsibility2 {
public static void main(String[] args) {
RoadVehicle roadVehicle = new RoadVehicle();
roadVehicle.run("摩托車");
roadVehicle.run("汽車");
AirVehicle airVehicle = new AirVehicle();
airVehicle.run("飛機");
}
}
class RoadVehicle {
public void run(String vehicle) {
System.out.println(vehicle + "公路運行");
}
}
class AirVehicle {
public void run(String vehicle) {
System.out.println(vehicle + "天空運行");
}
}
class WaterVehicle {
public void run(String vehicle) {
System.out.println(vehicle + "水中運行");
}
}
運行結果:

優點:
- 遵守了單一職責原則
缺點:
- 這樣做的改動很大,將類分解,同時修改客戶端
改進2:
package com.atguigu.principle.singleresponsibility;
public class SingleResponsibility3 {
public static void main(String[] args) {
Vehicle2 vehicle2 = new Vehicle2();
vehicle2.run("汽車");
vehicle2.runWater("輪船");
vehicle2.runAir("飛機");
}
}
class Vehicle2 {
public void run(String vehicle) {
System.out.println(vehicle + " 在公路上運行....");
}
public void runAir(String vehicle) {
System.out.println(vehicle + " 在天空上運行....");
}
public void runWater(String vehicle) {
System.out.println(vehicle + " 在水中行....");
}
}
運行結果:

優點:
- 遵守了單一職責原則,而且這種修改方法沒有對原來的類做大的修改,只是增加方法,這里雖然沒有在類這個級別上遵守單一職責原則,但是在方法級別上,仍然是遵守單一職責
單一職責原則注意事項和細節
-
降低類的復雜度,一個類只負責一項職責,
-
提高類的可讀性,可維護性
-
降低變更引起的風險
-
通常情況下,我們應當遵守單一職責原則,只有邏輯足夠簡單,才可以在代碼級違反單一職責原則;只有類中 方法數量足夠少,可以在方法級別保持單一職責原則,上面第三個代碼就是這種情況
這篇博客是我在B站看韓順平老師資料結構和演算法的課時的筆記,記錄一下,防止忘記,也希望能幫助各位朋友,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/510846.html
標籤:Java
