軟件設計遵循的基本原則


打算寫一個設計模式系列的學習筆記,參考書籍《軟件秘笈---設計模式那點事》

1、設計模式概述

1.1)高內聚、低耦合

  一個軟件系統要有一個穩定的架構,不會隨着需要的改變在發生巨大的變動。因此,高內聚、低耦合是一個軟件系統設計中必須遵循的基本原則。

  所謂高內聚,是指一個軟件模塊內各個元素彼此結合的緊密程度要高,即一個軟件模塊是由相關性很強的代碼組成,只負責一項任務,也就是常說的單一責任原則。

  所謂低耦合,是指一個軟件系統內不同模塊之間的互連程度要低。不同模塊之間的聯系越緊密,其耦合性就越強,模塊的獨立性則越差,模塊間耦合的高低取決於模塊間接口的復雜性、調用的方式及傳遞的信息。

  因此,在一個軟件系統中,應當盡量保證模塊的獨立性,模塊實現功能職責單一,越簡單越好。這樣有利於系統復用,並且大大減少模塊之間的依賴,系統穩定性高,更易於維護。

1.2)面向抽象編程

  在面向過程的軟件開發中,上層組件調用下層組件,就意味着上層組件依賴於下層組件,當下層組件發生劇烈變化時,上層組件也要跟着一起發生變動,這將導致軟件組件模塊的復用性大大降低,從而增加軟件開發成本,使軟件結構設計上存在一定的臃腫性,不利於后期系統維護工作。

  在面向對象的軟件設計中,很好地解決了上述問題,使程序都依賴於抽象,而不是依賴具體實現。因為在一般情況下抽象的變化概率比較小,依賴抽象編程大大降低了客戶應用程序與實現細節的耦合度,提升了軟件結構的健壯性。只要保證抽象不發生變化,客戶程序就不需要改變。這就是依賴倒置原則。

  在程序中要盡量使用抽象類型作為對象實例變量類型,這樣就保證了將客戶程序與具體實現之間解耦,因為使用的是抽象類型,因此具體實現的改變不會影響抽象類型的改變。

1.3)多用組合少用繼承

  在面向對象的軟件設計中,對於類的擴展,首先想到的是使用類的繼承來實現,由子類來繼承父類,從而完成對子類功能的擴展。繼承的好處是可以盡量讓相同的屬性或者功能復用,但是隨着項目越來越大,需求的不斷變化,繼承就會變得越來越臃腫,后期難以控制和維護。最重要的是,繼承會不分青紅皂白地把父類的公有和受保護的方法統統繼承下來,而這些方法可能是子類不需要的功能,會對子類產生一些危害。

  如果使用組合方式,就不會出現上述繼承的問題。所謂對象組合,是指在一個對象中含有另外一個對象的引用,從而可以使用該內部對象的引用作出一些處理行為。使用組合方式的好處有以下幾點:首先,不會對類產生有害的影響;其次,組合方式要比繼承方式靈活,因為是由系統運行動態地決定使用對象與否;最后,不會造成因繼承而引起的類膨脹,減少了對父類的依賴性。

1.4)“開-閉”原則

  “開-閉”原則,即“對擴展開放,對修改關閉”,指的是在軟件設計中,當對某一軟件實體進行擴展時,盡量不要去修改原有的軟件實體,換句話說就是在不修改原有軟件實體的情況下對其進行擴展。這種軟件設計方式其實是一種目標,它考慮了軟件后期的維護等其他因素。一個軟件系統如果可以達到這個目標,那它就是可擴展、易維護的。

  在軟件設計領域中,眾多設計模式的應用就是為了達到這個目標。“開-閉”原則是一種很抽象的設計原則,更像是一種倡導的口號,其他設計原則都是為了實現“開-閉”原則的具體原則。“開-閉”原則與其他設計原則就好比抽象父類與子類的關系一樣。

 

2、設計模式概述

2.1)什么是設計模式

  設計模式的概念最早是由一名建築師提出來的,他試圖在圖紙上用一種結構化、可重用化的方法,獲得建築的基本要素,從而可以將更多的精力放在具體建築物和城鎮的設計上。逐漸的,這種思想在軟件領域流行起來,並獲得發展。

  設計模式(Design Pattern)就是一套被反復使用、多數人知曉的、經過分類編目的代碼設計經驗的總結。使用設計模式的目的是為了提高代碼的可重用性,讓代碼更容易被他人理解,使系統質量更加有保證、系統更加可靠。

2.2)設計模式的分類

  設計模式是一種解決問題的思想,它可以應用在任何環境中,保證系統的穩定運行。

  按照目的來分,設計模式可以分為創建型模式、結構型模式和行為型模式。

2.2.1)創建型模式

  創建型模式用來處理對象的創建過程,主要包含以下5種設計模式:

  ☆工廠方法模式(Factory Method Pattern)

  ☆抽象工廠模式(Abstract Factory Pattern)

  ☆建造者模式(Builder Pattern)

  ☆原型模式(Prototype Pattern)

  ☆單例模式(Singleton Pattern)

2.2.2)結構型模式

  結構型模式用來處理類或者對象的組合,主要包含以下7種設計模式:

  ☆適配器模式(Adapter Pattern)

  ☆橋接模式(Bridge Pattern)

  ☆組合模式(Composite Pattern)

  ☆裝飾者模式(Decorator Pattern)

  ☆外觀模式(Facade Pattern)

  ☆享元模式(Flyweight Pattern)

  ☆代理模式(Proxy Pattern)

2.2.3)行為型模式

  行為型模式用來對類或對象怎樣交互和怎樣分配職責進行描述,主要包含以下11種設計模式:

  ☆責任鏈模式(Chain of Responsibility Pattern)

  ☆命令模式(Command Pattern)

  ☆解釋器模式(Interpreter Pattern)

  ☆迭代器模式(Iterator Pattern)

  ☆中介者模式(Mediator Pattern)

  ☆備忘錄模式(Memento Pattern)

  ☆觀察者模式(Observer Pattern)

  ☆狀態模式(State Pattern)

  ☆策略模式(Strategy Pattern)

  ☆模板方法模式(Template Method Pattern)

  ☆訪問者方法模式(Visitor Pattern)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM