如何使用Singleton(獨體模式) 來操作cache

如何使用Singleton(獨體模式) 來操作cache

情境

常用的存成cache 物件
希望下次登錄還可以看見資料
存成sharepreference、file、sqlite或者存在server端

程式碼說明

首先建立一個class

public class UserData{
    private String userName;
    private String userId;
    private int userAge;

    //還有其他屬性 自己定義
    public void setUserName(String name){
        userName = name;
    }

    public String getUserName(){
        return userName;
    }

    //其他的getter setter
}

宣告好類別以後 以sigleton pattern實做

這個模式的好處是只會new出一個物件

public class MyCacheDate{
    public static MyCacheDate mMyCacheDate;

    private ArrayList<UserData> mUserDataList;

    public static MyCacheDate getInstance(){
        if(mMyCacheDate == null){
            mMyCacheDate = new MyCacheDate();
            mMyCacheDate.init();
        }
        return mMyCacheDate;
    }

    private MyCacheDate(){}

    private void init(){
        mUserDataList = new ArrayList<UserData>();
    }

    public void addUserData(UserData data){
        mUserDataList.add(data);
    }

    public UserData getUserDataByIndex(int index){
        return UserData.get(index);
    }

    public ArrayList<UserData> getUserList(){
        return mUserDataList;
    }
    //其他方法自己實做
}

那麼 就可以開始使用它惹

public class A extends Activity{
    public void OnCreate(Bundle b){
        //...
        UserData data = new UserData();
        data.setUserName("Brown");
        data.setAge(11);
        data.setId(0);
        MyCacheDate.getInstance().addUserData(data);
    }
}

每一個activity進行切換時 都可以取得那個物件來設定

最後到D的時候就可以取出這個物件

public class D extends Activity{

    public void OnCreate(Bundle b){
        //...
        MyCacheData dataCache = MyCacheData.getInstance();
        ArrayList<UserData> userDatas = dataCache.getUserDataList();
        for(UserData u : userDatas){
            String name = data.getUserName();
            ...
            //這邊你也可以把所有資料存在SharedPreference DB 或File
            //下次進入app仍然可以取得上次更新的資料
        }
    }
}

所有資料都可以即時取出 而不會因為你UI切換而改變

http://www.ptt.cc/bbs/AndroidDev/M.1412383579.A.74F.html