Java設計模式(一)七大設計原則
設計模式包含了面向物件的精髓,“懂了設計模式,你就懂了面向物件分析和設計(OOA/D)的精要”
參考視訊:https://www.bilibili.com/video/BV1G4411c7N4
應用場景->設計模式->剖析原理->分析實現步驟(圖解)->程式碼實現-> 框架或專案原始碼分析(找到使用的地方) 的步驟講解 [比如: 建造者模式 ]
編寫軟體過程中,程式設計師面臨著來自耦合性,內聚性以及可維護性,可擴充套件性,重用性,靈活性等多方面的挑戰,設計模式是為了讓程式(軟體),具有更好的:
- 1) 程式碼重用性 (即:相同功能的程式碼,不用多次編寫)
- 2) 可讀性 (即:程式設計規範性, 便於其他程式設計師的閱讀和理解)
- 3) 可擴充套件性 (即:當需要增加新的功能時,非常的方便,稱為可維護)
- 4) 可靠性(即:當我們增加新的功能後,對原來的功能沒有影響)
- 5) 使程式呈現高內聚,低耦合的特性
設計模式原則,其實就是程式設計師在程式設計時,應當遵守的原則,也是各種設計模式的基礎(即:設計模式為什麼這樣設計的依據)。設計模式常用的七大原則有:
- 1) 單一職責原則
- 2) 介面隔離原則
- 3) 依賴倒轉(倒置)原則
- 4) 里氏替換原則
- 5) 開閉原則
- 6) 迪米特法則
- 7) 合成複用原則
一、單一職責原則
基本介紹
對類來說的,即一個類應該只負責一項
案例
交通工具類
1.違背單一職責
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 vechicle){ System.out.println(vechicle + " 正在路上跑"); } }
一個類混雜了所有交通工具
2.類上遵守單一職責
不同型別交通工具不同的類
public class SingleResponsibility2 { public static void main(String[] args) { // TODO Auto-generated method stub 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 + "在水中執行"); } }
在類上遵守了單一職責原則,但是有缺點:
- 原來的程式碼改動很大,類要修改,還要修改客戶端
- 程式執行成本高
3.方法級別上遵守單一職責
直接改進Vehicle類
public class SingleResponsibility3 { public static void main(String[] args) { // TODO Auto-generated method stub 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 + " 在水中執行...."); } }
雖然在類上沒有遵守單一職責原則,但是在方法上遵守了,雖然未完全嚴格遵守單一原則,仍可看成遵守了單一職責原則。
沒有對類做大的修改,只是增加了方法。
單一職責原則注意事項和細節
1) 降低類的複雜度,一個類只負責一項職責。
2) 提高類的可讀性,可維護性
3) 降低變更引起的風險
4) 通常情況下,我們應當遵守單一職責原則,只有邏輯足夠簡單,才可以在程式碼級違反單一職責原則;只有類中方法數量足夠少,可以在方法級別保持單一職責原則
二、介面隔離原則
IDEA使用UML外掛
搜尋PlantUML Integration
百度搜索並下載安裝軟體Graphviz-2.38
點選小