傾地開發|七大重要軟體設計模式

七大重要軟體設計模式

【傾地開發】

在軟體設計中,通常把大型問題分解成一組子問題,再對每個子問題採用適當的設計正規化(paradigm)。軟體設計正規化是軟體設計經驗的總結,多數已被廣泛接受,但它不是標準,只能視為軟體工程最佳實踐的一種形式。

軟體設計模式就是一種正規化,可視為軟體工程的一種最佳實踐(顯然是與結構有關的最佳實踐)。目前常見的面向物件設計模式有23種,它們被分為三大類,分別稱為物件建立型模式、物件結構型模式和物件行為型模式。從中挑選7種模式加以討論,它們包括工廠模式、抽象工廠模式、介面卡模式、裝飾器模式、代理模式、迭代器模式以及觀察者模式。

01工廠模式

傾地開發|七大重要軟體設計模式

simple factory

工廠模式也稱簡單工廠(Simple Factory)模式,可根據使用者提供的引數返回指定父類(介面)的一個子類(具體類)例項,如同一個工廠生產一個產品系列。它提供了一種將物件的使用過程與物件的具體建立過程隔離開來的解決方案,對於第三方開發的中介軟體或遠端服務系統至關重要。

02抽象工廠模式

傾地開發|七大重要軟體設計模式

abstract factory

抽象工廠(Abstract Factory)模式是簡單工廠模式的延伸,可形象地描述為“工廠的工廠”。一個抽象工廠類可建立多個具體工廠物件,用於產生多個抽象類(介面)的子類(具體類)例項。這些例項按二維分佈,由一個具體工廠生產的物件所例項化的類繼承同一個父類。抽象工廠提供的同樣是將物件的使用過程與物件的具體建立過程隔離開來的解決方案,它進一步引入了建立過程的多樣化,允許使用者根據需要啟動不同的建立過程。

03介面卡模式

傾地開發|七大重要軟體設計模式

adapter1

傾地開發|七大重要軟體設計模式

adapter2

介面卡(Adapter)模式採用包裝層改變已有類/物件的介面,使得原本由於介面不相容而不能一起工作的類或物件可以一起工作。介面卡模式的應用場景主要是客戶程式希望透過新的介面複用某個現有的類或物件(不想或不能改變被複用類/物件的介面)。其解決方案是在原有的類/物件之上加一個包裝層,採用類繼承或者物件組合的方式提供所需要的介面。前者一般稱為類介面卡,後者則稱為物件介面卡。

04裝飾器模式

傾地開發|七大重要軟體設計模式

decorator

裝飾器(Decorator)模式採用包裝層動態地擴充套件一些額外的功能。其主要優點是在不影響其他物件的情況下,以動態、透明的方式給單個物件新增職責。採用裝飾器模式的解決方案在某些場景中優於建立一個子類家族的方案,因為後者有可能為了支援所有的功能組合而使得子類數目呈指數增長。

05代理模式

傾地開發|七大重要軟體設計模式

proxy

代理多用於C/S架構的伺服器端,代理(Proxy)模式也提供一種採用包裝層的解決方案,但它不修改物件的介面,而只是為笨重的服務物件提供一個輕量級的前端。由於笨重的服務物件在其例項化過程中需要消耗大量的計算資源,實踐中往往希望延長它們的生命週期,由此提高系統的效能。方法之一是把它們池化,當一個客戶請求到來時,伺服器端只需例項化一個代理,這個代理負責接受請求,把它轉交給一個空閒的服務物件來完成,並把該物件返回的結果回傳給客戶端。服務完成之後,代理物件(而不是服務物件)將被析構以回收記憶體資源。

06迭代器模式

傾地開發|七大重要軟體設計模式

iterator

迭代器(Iterator)模式的設計目的是提供一個標準化的抽象迭代器(或其介面),以便為不同聚集(aggregation)/彙集(collection)提供通用的遍歷操作方法。迭代器模式的優勢主要有兩個:①客戶程式可以透過同樣的方法遍歷不同的彙集;②客戶程式無需瞭解彙集的內部結構。不過,為了獲得以上的“好處”,每一個彙集都必須實現一個抽象的迭代器建立方法。

07觀察者模式

傾地開發|七大重要軟體設計模式

observer

觀察者(Observer)模式的設計目的是建立一對多的依賴關係,使得一個物件的某種狀態變化可以觸發多個物件的相應行為。觀察者模式中包括一個主體和任意數目的觀察者,當主體發生改變時,所有的觀察者都將會接到更新的通知。這種互動模式的更一般形式是釋出/訂閱(publish/subscribe)模型,

傾地開發

傾地開發依託於強大案例素材庫與國際頂級諮詢模型應用,整合PC端、移動端、系統、小程式、APP五站合一的一體化搭建工程,高階UI設計,超高性價比品質保證,10 年軟體開發經驗,300 人精英團隊百萬客戶信賴選擇,公司立足深圳與華為雲、騰訊雲深度合作,致力於為政府、企業、個人提供在WEB、移動、系統、應用、定製系統整合、特別在APP開發、雲計算、物聯網等軟體應用方面擁有獨特的個性化解決方案。

傾地開發|七大重要軟體設計模式

關注我們,一起尋求合作吧