該模式也是常見的一種設計模式,即使你沒用過它,也至少應該見過它,開發中我們經常使用各種開源框架,只要你有心分析其原始碼,就可以從中看出不少設計模式的影子,特別是本文的主角 Builder模式!博主經常閱讀一些框架的原始碼,從中深有體會,
閑話少敘,本篇就來簡單的掰扯掰扯這個設計模式,在面向物件的世界中,構建者模式構建的成品就是一個復雜的物件,這讓我想起了小時候看的動漫恐龍戰隊,幾個隊員拿著不同的變身器分別組成機器人的不同部位,最終一步步的構建出一個超級機器人!

機器人恐龍形態:

所以從恐龍戰隊的例子可以看出構建者模式的意圖之一就是:將一個復雜的構建與其表示相分離,另外面向物件的三大特征之一就是抽象!所以在設計框架的時候,抽象能力也算是一個框架優劣重要的體現,因為抽象的實作方式不同,構建的物件也不同,還是以恐龍戰隊來舉例子,恐龍除了上面的恐龍形態外,還有人行形態,見下圖:

這就是構建者模式的強大之處,只要抽象層做的好,不同的實作,可以構建出不同的物件,我覺得這方面Retrofit這個框架把構建者模式應用的淋漓盡致,看下圖,我們可以構建出不同的CallAdapter和Converter,然后通過不同的Adapter和Converter來創建不同的Retrofit物件,(如果對Retrofit不了解的話可以參考博主的okhttp原始碼決議):

不知道大家注意到沒有,一些常用的框架,比如Android的圖片快取框架,將快取策略抽象出來,除了框架本身自帶的快取實作之外,也可以讓客戶端自定義快取實作,最終在構建圖片快取物件的時候注入進來就可以了,見下圖:

再比如網路請求Okhttp框架,其強大的攔截器的設計理念讓我們在構建OkhttpClient物件的時候,可以添加自己的攔截器,比如統一列印的攔截器,添加統一引數的攔截器等等,最侄訓構建出不同的OkhttpClient物件,見下圖:

其實模式不模式的不是最重要的,最重要的是抽象設計的能力,抽象做的好,對以后的擴展來說就很得心應手,說白了設計模式在我看來就是 抽象能力的具體展現罷了,不用談模色變,也不同生搬硬套,另外構建者設計模式與其說是一個模式,不如說是一個思想,它可以雜糅其他的模式,比如構建者的部分物件用了模板,代理等模式都是有可能的,總的來說就是設計思想,對于構建者模式的組成部分來說,同樣適用,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/229277.html
標籤:區塊鏈
上一篇:2020-12-01
