原创 DataProvider爲項目提供基礎信息

基礎信息提供者接口public interface IDataProvider { /** * 項目環境類型(開發,測試,正式) * * @return

原创 利用組合模式與訪問者模式實現Android樹形控件(多層級,可拖拽)

效果圖如上,實現思路有三點。 1.使用組合模式組織部門員工數據結構。 2.使用訪問者模式定義並解耦對部門、員工元素的操作。 3.使用Android的拖放框架,能夠允許用戶使用圖形化的拖放手勢,把數據從當前佈局中的一個View對象中移到另

原创 通過遞歸與訪問者模式過濾文件

在閱讀Fresco源碼時看到一個遍歷文件的小模塊,職責清晰、設計精妙、關鍵有着很高的拓展性,在研究之後果斷代碼收藏。 思路:利用遞歸遍歷整個目錄,如果是文件,訪問者執行訪問。 文件樹 public class FileTree {

原创 利用中介者模式與觀察者解決購物車與商品列表聯動問題

由於項目保密性只介紹出現的問題和解決方案的思路。 說明: 1 商品分類列表:顯示商品分類名稱以及此分類下放入購物車商品的總數量。 2 商品列表:顯示商品信息和兩個操作按鈕“+”,“-”以及加入購物車數量。 3 購物車列表:顯示購物車商品

原创 利用代理模式隔離Android第三方組件(圖片加載庫,網絡庫)

最初項目中一直使用ImageLoader加載圖片直到Glide的出現,項目面臨着艱難的選擇,一方面因爲Glide的強大決定替換掉ImageLoader,而另一方面項目中大量耦合着ImageLoader加載圖片的代碼,這意味着巨大的工作量。

原创 Spring Ordered接口

        Java中的對象排序都會跟Comparable Comparator 這兩個接口扯上關係,下面我們要說說Spring排序接口Ordered。public interface Ordered

原创 規格模式,對象篩選

規格模式已經是一個非常具體的應用框架了(相對於23個設計模式),大家遇到類似多個對象中篩選查找,或者“業務規則不適於放在任何已有實體或值對象中,而且規則的變化和組合會掩蓋那些領域對象的基本含義”,或者是想自己編寫一個類似LINQ的語言工具

原创 備忘錄模式,拍電影

        劇組在拍戲,演員深情的講着自己的獨白“該配合你演出的我演視而不見,在逼一個最愛你的人即興表演”,導演看後並不滿意要重拍第二句,場記會記錄演員重拍時的佈景、臺詞、演員的動作表情,等到重拍的時候恢復到此狀態。 模式定義: 在不

原创 總結TextWatcher兩種使用場景

1. 觀察多個輸入框(必填)是否輸入內容,控制按鈕是否可用。public class ButtonWatcher { private final Button btn; //控制按鈕 private final Edit

原创 橋接模式下的本地數據加載

項目中我們可以加載assets文件夾下的xml文件、txt文件、圖片文件,也可加載sd卡下xml文件、txt文件、圖片文件。如圖 這裏有兩個變化的維度,文件地址和數據格式。我將抽象與實現分離構建本地數據加載。 代碼:數據 public i

原创 利用模板模式封裝APP版本更新模塊

在項目中做版本更新,流程如下: 1. 檢查版本 2. 顯示版本提示 3. 下載apk 4.  安裝 於是我將相關代碼進行重構,定義版本更新的骨架而將一些方法延遲到子類。 public abstract class CheckVersio

原创 Volley,核心架構生產者消費者模式

晚上母親做烙餅,熟了就放到桌子上,我和姐看到桌子上有餅就拿來吃,沒了就等着。這就是生產者消費者模式。母親            生產者            做餅桌子            產品容器        放餅我和我姐     消

原创 Activity,Fragment綁定生命週期,實現EventBus的自動註冊、自動註銷。

Glide中一個重要特性是Request可以隨Activity或Fragment的onStart而resume,onStop而pause,onDestroy而clear,從而節約流量和內存,並且防止內存泄露。在閱讀Glide相關源碼後,其

原创 帶邊框(Border)的LinearLayout

先看一下這樣一個簡單的佈局,所展示的內容很少,上下兩條分割線,兩個文本。1.普通做法<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://