架構師修煉套路:軟件設計模式

1、什么是設計模式(Design Pattern)?

一個設計模式首先描述了一個在我們的環境中不斷重復發生的問題,然后描述了解決這個問題的方法的核心。

換句說話,一個設計模式是一個三方規則,描述了一個特定內容、一個問題和一個對應解決方法的關系。

2、為什么要學習設計模式?

設計模式是一種知識和經驗,和編程語言無關。熟練的掌握各種設計模式后,程序猿們可以快速識別出一個系統的骨骼框架,也可以快速的搭建出一個健壯高效的系統。

設計模式就像是程序猿們心中的一張張藍圖,握住它們,就可能成為一位有大局觀的架構師;松開它們,注定是顆默默無聞的螺絲釘。

3、設計模式的分類

設計模式的分類方式有很多種,目前比較權威的分類方式(《Design Patterns: Elements of Reusable Object-Oriented Software》)是將其分為三類:結構模式(Structural Patterns)、行為模式(Behavioral Patterns)以及創建模式(Creational Patterns)。

結構模式:解耦多個類;引入一個抽象類用于將來的擴展;封裝復雜的結構。

行為模式:允許算法和對象職責分配之間的選擇(“誰做什么”);簡化在運行時難以追蹤的復雜的控制流。

創建模式:為復雜的初始化流程提供一個清晰簡單的視角;讓系統中對象的創建、組合和表達方式與系統本身獨立開來。

4、設計模式舉例

篇幅所限,所以只選取了兩個典型的設計模式來進行講解,分別為Adapter(Structural Pattern) 和Observer(Behavioral Pattern)。

Adapter

遇到的問題:新的系統需要使用舊的不兼容組件,盡量不修改舊的組件。

目標:提供訪問舊組件的入口。

應用場景:假設舊組件LegacyRectangle擁有一個display方法,接收x1、y1、w、h四個參數來展示長方形,但是在新系統中客戶期望輸入x1、y1、x2、y2四個參數來展示長方形。在客戶是上帝的假設下,我們怎樣才能既重用舊組件(減少開發新組件的成本)又滿足客戶的需求呢?

解決方案:在Rectangle(Adapter)中將x1、y1、x2、y2轉換成LegacyRectangle所需的x1、y1、w、h,然后調用LegacyRectangle中的display方法。

Observer

遇到的問題:一個對象經常改變它的狀態,有多個視圖需要展示這個對象的當前狀態。

目標:通過定義一個一對多的依賴,使當某一個對象(Publisher)的狀態改變時,所有它的依賴者們(Subscriber)都將被通知并且自動更新狀態。

應用場景:使用電腦的人都知道,我們可以在很多地方修改同一個文件的名字,比如以下地方(以Mac電腦為例)。

那么大家有沒有思考過,當我們在某一個地方修改名字后,操作系統會做什么?所有地方都會立刻更新成修改后的新名字嗎?跟我們在哪個地方修改名字會有關系嗎?

解決方案:

小 結

生活中模式無處不在,無論你是修橋梁還是種莊稼,代碼里面設計模式也無處不在,因為它們都是經過殘酷的考驗后流傳下來的寶貴經驗,值得借鑒和學習。

學習設計模式和讀書一樣,讀書是為了培養甚至灌輸給我們正確的價值觀,但是有很多時候,卻是讓我們了解,要達到一個所謂正確的價值觀,這條道路有多么漫長,多么崎嶇。

本文作者:黃文博(點融黑幫),現就職于點融網成都團隊移動組,畢業于慕尼黑工業大學,主修計算機科學與技術。曾就職于騰訊北京、西門子慕尼黑總部,并曾兩度創業。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,886評論 18 139
  • ?? 對設計模式的極簡說明!?? 這個話題可以輕易讓任何人糊涂?,F在我嘗試通過用 最簡單 的方式說明它們,來讓你(和我...
    月球人simon閱讀 1,121評論 1 2
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,142評論 25 708
  • 設計模式匯總 一、基礎知識 1. 設計模式概述 定義:設計模式(Design Pattern)是一套被反復使用、多...
    MinoyJet閱讀 3,970評論 1 15
  • 在日常生活中碰見蜘蛛是一件再平常不過的事情了,但很多人對這種八條腿的生物有一種莫名的恐懼,說實話它們的外貌也確實蠻...
    sofa閱讀 635評論 0 0