close

web_hi_res_512.png

更強大的土司 – Toasty原始碼解析(下) 架構

The usual Toast, but with steroids

  上回主要是在講解Android Support Annotations,而下回則是要講主要架構,其實原本沒有打算分上下回,直接講架構,只是事後又覺得那些Annotations其實滿重要的就切成上下回了。Toasty的主要架構中用了很多的method overloading,也就是中文的方法重載來實現多種參數輸入的方法。

cons.phg.png

  我們以上圖來講解他所用的method overloading,由於Toast最主要的目標在於顯示出較特殊華麗的toast,而這個顯示出toast的功能就在名為custom的方法中,其他的方法最終都還是會回到他身上。

  圖中每一個藍方格都是一個方法,方格裡面的 < > 誇號內是此方法需要的輸入參數數目。最左邊的方法就是,當使用者輸入的參數訊息不夠多時,Toasty就會幫使用者把需要的參數用預設值補齊後再呼叫custom顯示出toast。

show.png

  至於為什麼還會分成success和error跟其他的種類,這是因為Toasty本身就內建幾種常見需要使用toast的狀況、並給予他們不同的預設值,使用者可以直接根據自己需要的狀態去呼叫來獲得相對應的預設值 ( 如上圖 ) ,若是使用者都不喜歡這些內建狀態,就可以直接呼叫custom生成獨一無二的toast。

  這個時候如果有跟我一樣擁有其他語言背景的開發者大概會覺得大費周章,例如在PHP中我們可以只用一個method就達到這個效果,使用default parameter就可以讓一個輸入參數擁有預設值且依舊可以被使用者重新定義!

co458d.png

像是這樣的程式輸出就為

codere.png

來達到一樣的效果,不過在我查詢過後發現java並沒有提供default parameter這樣的功能,似乎只能使用method overloading達成,但是method overloading也是有他的優點,我認為尤其是在可讀性上升滿多的,同時若是其他使用者需要擴充功能,他在補充default值跟實際需求的耦合姓很低,使得更改程式來擴充功能變得相當容易。

  在最後附上Toasty中method overloading的一小段程式碼,相信大家看過之後就可以理解上面我提及的兩個優點。

cod.png

  總結來說我覺得自己算是上了一課,方法重載這個功能我在以前學習OOP時就知道了,但是因為工作上大多使用PHP作為開發,不知不覺都採用default parameter來處理問題,很少真的在實作中使用到重載。但是在很多時候程式碼的擴充性和可讀性還是相當重要的,懂得在不同的背景和需求中選用最合適的方法解決問題才是最好的!

 

參考資料

[1] Toasty github頁面

https://github.com/GrenderG/Toasty

arrow
arrow
    文章標籤
    java android
    全站熱搜
    創作者介紹
    創作者 迷宮兔 的頭像
    迷宮兔

    兔窩

    迷宮兔 發表在 痞客邦 留言(0) 人氣()