2015-10-11 76 views
0

這個項目有更多的新聞,雜誌和用戶可以添加任何東西到readlist和favouritelist。但我如何設計這個有用的?也許我可以添加接口或抽象類?這就像一個工廠設計模板? (SparseArray必修)我應該怎樣設計纔有用

閱讀和readlist類;

public class Read{ 
    private String date; 
    private int ID; 

    public Read(int ID, String date) { 
     this.ID = ID; 
     this.date= date; 
    } 
} 

public class ReadList{ 
    private static SparseArray<Read> LIST = new SparseArray<>(); 

    public static void add(int ID){ 
     LIST.put(ID, new Read(ID, DateFormat.getDateTimeInstance().format(new Date()))); 
    } 

    public static void remove(int ID){ 
     if(LIST.indexOfKey(ID) >= 0) 
      LIST.remove(ID); 
    } 
} 

收藏和favoritelist類;

public class Favorite{ 
    private String date; 
    private int ID; 

    public Favorite(int ID, String date) { 
     this.ID = ID; 
     this.date= date; 
    } 
} 

public class FavoriteList{ 
    private static SparseArray<Favorite> LIST = new SparseArray<>(); 

    public static void add(int ID){ 
     LIST.put(ID, new Favorite(ID, DateFormat.getDateTimeInstance().format(new Date()))); 
    } 

    public static void remove(int ID){ 
     if(LIST.indexOfKey(ID) >= 0) 
      LIST.remove(ID); 
    } 
} 

謝謝你,索裏對我的英語不好

回答

1

您可以重構很多...

第一個想法是將你的static到某個地方更相關:每個* List類之外。

例如:

public abstract class ObjectList<T> { 
    private final SparseArray<T> elements = new SparseArray<>(); 
    protected abstract T createObject(int id, String date); 
    public void add(int id) { 
    elements.put(id, createObject(id, DateFormat.getDateTimeInstance().format(new Date()))); 
    } 
    public void remove(int id) { 
    if (elements.indexOfKey(id) >= 0) { 
     elements.remove(id); 
    } 
    } 
} 

然後你就可以創建兩個實例:

public static final ObjectList<Favorite> favorites = new ObjectList<>() { 
    @Override protected Favorite createObject(int id, String date) { 
    return new Favorite(id, date); 
    } 
} 
public static final ObjectList<Read> = new ObjectList<>() { 
    @Override protected Read createObject(int id, String date) { 
    return new Read(id, date); 
    } 
} 

如果使用Java 8(它看起來像你使用Android不支持Java 8呢,但我不知道,所以我包括反正):

public class ObjectList<T> { 
    private final SparseArray<T> elements = new SparseArray<>(); 
    private final BiFunction<Integer, String, T> func; 
    public ObjectList(BiFunction<Integer, String, T> func) { 
    this.func = func; 
    } 
    public void add(int id) { 
    elements.put(id, func.apply(id, DateFormat.getDateTimeInstance().format(new Date()))); 
    } 
    public void remove(int id) { 
    if (elements.indexOfKey(id) >= 0) { 
     elements.remove(id); 
    } 
    } 
} 
public static final ObjectList<Favorite> favorites = new ObjectList<>(Favorite::new); 
public static final ObjectList<Read> reads = new ObjectList<>(Read::new); 
+0

非常好,謝謝你的問題,同時我們打開不同的解決方案:)但我問一個小問題,例如,當我通過編號獲取新聞我如何檢測其讀取或最愛?因爲他們存儲在一個列表中(元素sparsearray列表) – kibar

1

隨着數據有鑰匙(ID) - 值(日期)結構,你應該看看Map接口。它擁有你想要的所有功能,如添加和刪除,並防止被投入重複ID英寸

http://docs.oracle.com/javase/8/docs/api/java/util/Map.html

+0

我知道這種方法,但我不這樣說。我想要例如;兩個類(ReadList和FavoriteList)有類似的方法。也許我創建抽象類或接口,並添加工廠類此algoritym是有用的和好的。因爲目前的代碼有一些相似的方法... – kibar