設計模式概述

程序員cow哥 發佈 2022-11-30T04:53:08.658875+00:00

正式開文前,先遞進式地進行幾個問答題進入內容和看一下整個功能結構圖。功能結構圖為什麼要用設計模式 使用設計模式的目的,用最簡單的一句話總結,就是為了開發出來的軟體是最好的。什麼是最好的軟體對客戶而言是滿足需求的功能,操作性是簡單的,學習成本是低的,運行速度是好的。

正式開文前,先遞進式地進行幾個問答題進入內容和看一下整個功能結構圖。

為什麼要用設計模式

使用設計模式的目的,用最簡單的一句話總結,就是為了開發出來的軟體是最好的。

什麼是最好的軟體

對客戶而言是滿足需求的功能,操作性是簡單的,學習成本是低的,運行速度是好的。

對開發者而言維護是簡單的,擴展是容易的,閱讀是舒服的。

最好的軟體是要滿足軟體的六大特性:

一、功能性:

1、適合性:軟體是否提供了相應的功能

2、準確性:軟體提供的功能是否正確(用戶需要的)

3、互操作性:產品與產品之間交互數據的能力,例如word對其他文檔的支持能力

4、保密安全性:允許經過授權的用戶和系統能夠正常地訪問相應的數據和信息,禁止未授權的用戶訪問.......

5、功能性的依從性:國際/國家/行業/企業 標準規範一致性

二、可靠性:產品在規定的條件下,在規定的時間內完成規定功能的能力

1、成熟性:軟體產品為避免軟體內部的錯誤擴散而導至系統失效的能力(主要是對內錯誤的隔離),exception等的處理

2、容錯性:軟體防止外部接口錯誤擴散而導致系統失效的能力(主要是對外錯誤的隔離)

3、易恢復性:系統失效後,重新恢復原有的功能和性能的能力。

4、可靠性的依從性

三、易用性:在指定使用條件下,產品被理解、學習、使用和吸引用戶的能力

1、易理解性:軟體交互給用戶的信息時,要清晰,準確,且要易懂,使用戶能夠快速理解軟體。

2、易學性:軟體使用戶能學習其應用的能力。

3、易操作性:軟體產品使用戶能易於操作和控制它的能力。

4、吸引性:

5、易用性的依從性:

四、效率性:在規定台條件下,相對於所用資源的數量,軟體產品可提供適當性能的能力

1、時間特性:平均事務響應時間,吞吐率,TPS(每秒事務數). 軟體處理特定的業務請求所需要的響應時間。

2、資源利用性:CPU 內存 磁碟 IO 網絡帶寬 隊列 共享內存. 軟體處理特定的業務請求所消耗的系統資源。

3、效率依從性:

五、軟體維護性:"四規", 在規定條件下,規定的時間內,使用規定的工具或方法修復規定功能的能力

1、易分析性:分析定位問題的難易程度

2、易改變性:軟體產品使指定的修改可以被實現的能力

3、穩定性:防止意外修改導致程序失效

4、易 測試性:使已修改軟體能被確認的能力

5、維護性的依從性

六、軟體可移植性:從一種環境遷移到另一種環境的能力

1、適應性:適應不同平台

2、易安裝性:被安裝的能力

3、共存性:軟體產品在公共環境中與其它軟體分享公共資源共存的軟體。

4、易替換性: 軟體產品在同樣的環境下,替代另一個相同用途的軟體產品的能力。

5、可移植性的依從性

如何做出最好的軟體

要做出好的軟體,是有工程方法論和指導設計原則的,軟體設計的有六大指導原則。

  • 開閉原則(Open Close Principle)

開閉原則就是說對擴展開放,對修改關閉。在程序需要進行拓展的時候,不能去修改原有的代碼,而是要擴展原有代碼,實現一個熱插拔的效果。所以一句話概括就是:為了使程序的擴展性好,易於維護和升級。想要達到這樣的效果,我們需要使用接口和抽象類等,後面的具體設計中我們會提到這點。

  • 單一職責原則

不要存在多於一個導致類變更的原因,也就是說每個類應該實現單一的職責,如若不然,就應該把類拆分。

  • 里氏替換原則(Liskov Substitution Principle)

里氏代換原則(Liskov Substitution Principle LSP)面向對象設計的基本原則之一。 里氏代換原則中說,任何基類可以出現的地方,子類一定可以出現。 LSP是繼承復用的基石,只有當衍生類可以替換掉基類,軟體單位的功能不受到影響時,基類才能真正被復用,而衍生類也能夠在基類的基礎上增加新的行為。里氏代換原則是對「開-閉」原則的補充。實現「開-閉」原則的關鍵步驟就是抽象化。而基類與子類的繼承關係就是抽象化的具體實現,所以里氏代換原則是對實現抽象化的具體步驟的規範。

歷史替換原則中,子類對父類的方法儘量不要重寫和重載。因為父類代表了定義好的結構,通過這個規範的接口與外界交互,子類不應該隨便破壞它。

  • 依賴倒轉原則(Dependence Inversion Principle)

這個是開閉原則的基礎,具體內容:面向接口編程,依賴於抽象而不依賴於具體。寫代碼時用到具體類時,不與具體類交互,而是與具體類的上層接口交互。

  • 迪米特法則(最少知道原則)

一個類對自己依賴的類知道得越少越好。也就是說無論被依賴的類多麼複雜,都應該將邏輯封裝在方法的內部,通過public方法提供給外部。這樣當被依賴的類變化時,才能最小的影響該類。

最少知道原則的另一個表達方式是:只與直接的朋友通信。類之間只要有耦合關係,就叫朋友關係。耦合分為依賴、關聯、聚合、組合等。我們稱出現為成員變量、方法參數、方法返回值中的類為直接朋友。局部變量、臨時變量則不是直接的朋友。我們要求陌生的類別不要作為局部變量出現在類中。

  • 合成復用原則(Composite Reuse Principle)

原則是儘量首先使用合成/聚合的方式,而不是使用繼承。

基於以上的軟體設計指導原則,在不違背大原則的前下,軟體工具界有一套模式,23個設計模式,指導原則是內功,設計模式則是招式。

  • 創建模式

創建對象,在類實例化的時候使用的模式,包括五種模式:工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式。

  • 結構型模式

在類或對象怎麼組合成一起組成較大的結構時候使用的模式,包括七種:適配器模式、裝飾器模式、代理模式、外觀模式、橋接模式、組合模式、享元模式。

  • 行為型模式

關注類和對象之間的聯繫,包括十一種:策略模式、模板方法模式、觀察者模式、疊代子模式、責任鏈模式、命令模式、備忘錄模式、狀態模式、訪問者模式、中介者模式、解釋器模式。

關鍵字: