更強大的土司 – Toasty原始碼解析(下) 架構
The usual Toast, but with steroids
上回主要是在講解Android Support Annotations,而下回則是要講主要架構,其實原本沒有打算分上下回,直接講架構,只是事後又覺得那些Annotations其實滿重要的就切成上下回了。Toasty的主要架構中用了很多的method overloading,也就是中文的方法重載來實現多種參數輸入的方法。
我們以上圖來講解他所用的method overloading,由於Toast最主要的目標在於顯示出較特殊華麗的toast,而這個顯示出toast的功能就在名為custom的方法中,其他的方法最終都還是會回到他身上。
圖中每一個藍方格都是一個方法,方格裡面的 < > 誇號內是此方法需要的輸入參數數目。最左邊的方法就是,當使用者輸入的參數訊息不夠多時,Toasty就會幫使用者把需要的參數用預設值補齊後再呼叫custom顯示出toast。
至於為什麼還會分成success和error跟其他的種類,這是因為Toasty本身就內建幾種常見需要使用toast的狀況、並給予他們不同的預設值,使用者可以直接根據自己需要的狀態去呼叫來獲得相對應的預設值 ( 如上圖 ) ,若是使用者都不喜歡這些內建狀態,就可以直接呼叫custom生成獨一無二的toast。
這個時候如果有跟我一樣擁有其他語言背景的開發者大概會覺得大費周章,例如在PHP中我們可以只用一個method就達到這個效果,使用default parameter就可以讓一個輸入參數擁有預設值且依舊可以被使用者重新定義!
像是這樣的程式輸出就為
來達到一樣的效果,不過在我查詢過後發現java並沒有提供default parameter這樣的功能,似乎只能使用method overloading達成,但是method overloading也是有他的優點,我認為尤其是在可讀性上升滿多的,同時若是其他使用者需要擴充功能,他在補充default值跟實際需求的耦合姓很低,使得更改程式來擴充功能變得相當容易。
在最後附上Toasty中method overloading的一小段程式碼,相信大家看過之後就可以理解上面我提及的兩個優點。
總結來說我覺得自己算是上了一課,方法重載這個功能我在以前學習OOP時就知道了,但是因為工作上大多使用PHP作為開發,不知不覺都採用default parameter來處理問題,很少真的在實作中使用到重載。但是在很多時候程式碼的擴充性和可讀性還是相當重要的,懂得在不同的背景和需求中選用最合適的方法解決問題才是最好的!
參考資料
[1] Toasty github頁面
留言列表