模式介紹

深夜程猿發表於2018-12-23

最近在專案組前輩的驅動下做一些簡單的系統設計工作,發現自己很多理論知識還是欠缺或者有些東西還只是停留在概念的似懂非懂層面,所以覺得應該重新整理一下沉睡在大腦裡面的知識,一方面為自己在做設計的時候提供理論支撐,一方面也希望能夠給讀者有一點點的啟發。這將會是公眾號接下來的一些列文章,每週會推出兩篇左右的文章。

這篇文章先簡單介紹一些模式相關的概念,是本人結合書本和自己實踐的理解,難免會有錯誤的地方,歡迎加QQ群【599791743】探討。

什麼是模式

模式是什麼?職業本能,大家馬上會想到程式碼的設計模式,系統的架構模式等。但是,模式遠不止這些。模式應用的領域很多,包括建築、軟體、機械......

那麼,如何給模式下一個定義呢?

模式是對一類問題和一類問題解決方法的抽象

如何理解一類問題和一類問題的解決方法的抽象?

首先,一類問題是指具有相同本質東西的問題,以及這些問題的解決方案也具有相同本質。抽象就是把這類問題和解決方案基本框架抽取出來,具體框架裡面怎麼填充可以根據實際的具體問題有不同的實現方式。

打個比方,我們最初使用的Web系統三層架構模式的時候,通常的架構模式是控制層、業務層和持久化層。這三層構成的系統架構模式就是一個框架,根據不同的系統,控制層、業務層和持久化層要做的東西不同。在這裡,系統的三層架構是對這類Web系統問題解決方法的抽象,不同的Web系統處需要處理的資料流轉問題是不同的具體問題。

通常,軟體開發領域,我們經常接觸的有程式碼的組織模式、程式碼的設計模式,系統的架構模式等

模式有哪些要素

要準確描述一個模式不是那麼簡單,我們在描述一個模式的時候,儘量考慮到如下要素:

  • 名字:每一個模式都應該有一個見名知義的名字,應該讓別人能夠領會到這個模式是用來做什麼的的。比如介面卡設計模式,我們通過名字“介面卡”可以理解為這個模式是為了解決一些適配問題而存在的
  • 問題:問題是模式要解決的一類問題的抽象,不是具體某一問題。因為不同形式的問題往往具有相同的本質,模式就是解決本質問題的。比如工廠模式,如果把該模式解決的問題描述為是為了解決建立多個XXX物件而存在的那麼就不是那麼準確了,我們應該描述為工廠模式是為了簡化物件的建立繁瑣過程以及降低程式碼耦合度。當然,這樣的描述還不夠準確,讀者可以試著自己描述一下。
  • 環境:環境描述了模式的適用範圍,也就是解決此類問題的模式存在的大背景
  • 力:力是描述與模式相關的力和約束,也就是使用此模式需要的付出的代價以及帶來的好處,這些代價和好處是怎麼相互影響的
  • 解答:解答描述的是模式是如何解決問題的
  • 舉例:舉例描述的是模式應用到一個具體形式的問題的整個過程,包括問題本質是什麼,解決方法是什麼,如何構建解決方法,使用此解決方法好處與副作用是什麼等等
  • 末態環境:末態環境描述的是力的解決,模式解決了什麼力,以及什麼力還沒有解決。此模式涉及其它的什麼模式,以及好處和壞處是什麼等
  • 推理:推理描述的是模式解決問題的整體過程,包括步驟、規則、好處和壞處等
  • 其它相關模式:其它相關模式描述的是模式和其它模式的關係等
  • 已知的應用:已知的應用和舉例類似,但是已知的應用描述的範圍更廣一點,它描述的是模式如何在已有的系統中出現和應用的

歡迎持續關注本公眾號,更多文章等待與讀者見面!

模式介紹

相關文章