顯示具有 design pattern 標籤的文章。 顯示所有文章
顯示具有 design pattern 標籤的文章。 顯示所有文章

2016年1月2日 星期六

Practice Reative(Rx) - merge

http://reactivex.io/documentation/operators/merge.html

前言: 最近Rx相關的議題在Android圈特別熱門,除了在Android Weekly裡面的文章幾乎都會擦到邊,又或者很多公司直接把這個架構導入產品之中;對我來說,原本某些code就已經有這個概念的影子,例如Async的操作,我們是用Parse推出的Bolts來實踐Defer/Promise,但Rx的概念更為通用,這表示Async的功能只是其中之一;學習Design Pattern最重要的是套用實際案例,所以以後Practice Reative(Rx)的系列文章,將針對各個component如何套用到實際的問題為目標。

今天要聊到merge,其概念就是將數個Observable合併起來,你可以用在把所有Error report的Observable合併,再透過統一方式去處理,而此範例將搭配RxBinding跟map來解決Report Flurry Event的問題。

假設UI(此Sample Code來自好事地圖的專案)有8個按鈕都要report不同的event到flurry,你可以這樣寫(Gist)



如有更多有趣的使用方式歡迎分享。

2015年8月23日 星期日

Implementation of Undo/Redo on Android



    最近公司的產品拼貼趣想做Undo(上一步)和Redo(下一步)的功能,因為使用者常常不小心就把拼好的作品誤移,然後又很難移回來,其中一個發想就是參考Photoshop可以做Undo/Redo(還有其他發想例如把某個Layer鎖住的功能),聽起來對現在的code非常有挑戰,但還是花了一個下午做出第一版Prototype(只支援Undo),看起來會動只是畫面會狂閃;後來iOS的同事才跟我介紹他們實作的方式 - UndoManager。

    秀了幾行code給我看後,感覺這個設計架構根本就超好,結果Android內建沒有這套實作,結果它藏在Android Framework裡,而且命名規則也很iOS(每一個Command叫做Operation),感覺是給內部UI Widget用的功能。

    解決這類型問題也有常用的Design Pattern,在SO找到這篇推薦Command Pattern,有空再來消化這個Pattern的其他應用方式。


2014年2月9日 星期日

Deferred & Promise



最近同事在解High Resolution issue的時候用到了Deferred/Promise的Design Pattern

問題是這樣子,要同時讀取及輸出N個圖片,但同時可以用M個Worker進行以節省時間,而圖片輸出的順序必須依照z-order排序,這表示圖片B輸出時必須等圖片A輸出完成。

這個問題的關鍵在於Task之間必須有Dependency的觀念,如果純用JAVA硬幹是可以用Thread Pool再加上Callable/Future實現,但針對這種問題已經有Deferred/Promise的設計概念可以使用。

簡單介紹一下D&P的概念(如上圖所示),如果Task之間有Dependency,甚至是帶入參數必須等前一個Task完成才能決定時,就非常適合使用它。

在jQuery 1.5之後已經有直接內建DeferredObject
http://api.jquery.com/category/deferred-object/

在Go的語言也是
http://golang.org/doc/effective_go.html#defer

Python也有人包library
http://twistedmatrix.com/documents/13.0.0/core/howto/defer.html

Java雖然不是內建但也有人包成library : jDeferred,當然也有Android的support
https://github.com/jdeferred/jdeferred

最近Parse也release一款類似的library : Bolts (iOS/Android supported)
https://github.com/BoltsFramework/

參考鏈結:

What are the differences between deferred promise and future in JS
http://stackoverflow.com/questions/6801283/what-are-the-differences-between-deferred-promise-and-future-in-javascript