java - 我如何用抽象类设计这些

标签 java android interface abstract

当我想将项目添加到 Collection 夹时..我将这段代码写在我的程序中并随处访问:Favorite.add(itemid);

当我想向消息中添加项目时,我将这段代码写在我的程序中并随处访问:Message.add(itemid);

两个类都有一些方法。那么我该如何设计这个有用的呢?

例如;

AbstractData.addFavorite(itemid);
AbstractData.addMessage(itemid);

AbstractData<Fav>.add(itemid);
AbstractData<SMS>.add(itemid);

你的意见?

Thank for help and sory for my little english...

Favorite.class

public class Favorite {

    static SparseArray<Fav> LIST = new SparseArray<>();

    public static boolean add(int ID){
        if(!check(ID)){
            LIST.put(ID, new Fav(ID, DateFormat.getDateTimeInstance().format(new Date())));
            return true;
        }

        return false;
    }

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

    public static boolean check(int ID){return LIST.get(ID) != null;}

    public static Fav get(int ID){return LIST.get(ID);}

    public static void saveALL(){
        AsyncTask.execute(new Runnable() {
            @Override
            public void run() {
                Fav favorite;
                for (int i = 0; i < LISTE.size(); i++) {
                    favorite = get(LISTE.keyAt(i));
                    if (favorite != null)
                        //Saving data to xml
                }
            }
        });
        Log.d("DONE", "Favorite LIST Saving");
    }

}

Collection 类

public class Fav implements IModel{
    private int ID;
    private String DATE;

    public Fav(int ID, String DATE) {
        this.ID = ID;
        this.DATE = DATE;
    }

    public int getID() {
        return ID;
    }

    public void setID(int ID) {
        this.ID = ID;
    }

    public String getDate() {
        return DATE;
    }

    public void setDate(String DATE) {
        this.DATE = DATE;
    }

}

Message.class

public class  Message{

    static SparseArray<SMS> LIST = new SparseArray<>();

    public static boolean add(int ID){
        if(!check(ID)){
            LIST.put(ID, new SMS(ID, DateFormat.getDateTimeInstance().format(new Date())));
            return true;
        }

        return false;
    }

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

    public static boolean check(int ID){return LIST.get(ID) != null;}

    public static SMS get(int ID){return LIST.get(ID);}

        public static void saveALL(){
        AsyncTask.execute(new Runnable() {
            @Override
            public void run() {
                SMS message;
                for (int i = 0; i < LISTE.size(); i++) {
                    message = get(LISTE.keyAt(i));
                    if (message != null)
                        //Saving data to xml
                }
            }
        });
        Log.d("DONE", "Message LIST Saving");
    }

}

短信类

public class SMS implements IModel{
    private int ID;
    private String DATE;

    public SMS(int ID, String DATE) {
        this.ID = ID;
        this.DATE = DATE;
    }

    public int getID() {
        return ID;
    }

    public void setID(int ID) {
        this.ID = ID;
    }

    public String getDate() {
        return DATE;
    }

    public void setDate(String DATE) {
        this.DATE = DATE;
    }

}

IModel.class

public interface IModel {

    int getID();
    void setID(int ID);

    String getDate();
    void setDate(String DATE);

}

最佳答案

在我看来...

  1. 不要过度设计您的模型。
  2. 不要让您的addremove 方法静态化,它最终会让您头疼。您希望您的构造函数初始化您的对象。
  3. 要么使用单例模式来获取管理器对象的单个实例,要么
  4. 将您的管理器类作为您的 Application 类中的局部变量,为其创建一个访问方法,并在 onCreate() 中对其进行初始化。
  5. 就我个人而言,我已经开始放弃 getter/setter 模式以支持公共(public)字段,尤其是当它们像枚举那样是 final 时。我知道这应该是丑陋的,但是...我不在乎,只要它方便 =)

所以...

   public class MyApplication extends Application
   {
     private static MyApplication instance;
     private FavouritesManager favouritesManager;

     public static getMyApplicationInstance ()
     {
        return instance;
     }

     public void onCreate ()
     {
         instance = this;
         favouritesManager = new FavouritesManager(this); // You may want it to have a Context...
     }
 }


   public class FavouritesManager
   {
     private Map<Integer,Favourites> favorites;

     public FavouritesManager ()
     {
         load();
     }

     public void add ( Favourite favourite )
     {
         favourites.put(favourite.id, favourite);
     }

     public boolean contains ( int favouriteId )
     {
       favourites.contaisKey(favouriteId);
     }

     private void load ()
     {
        favourites = new HashMap<>();
        // Maybe deserialize json from SharedPreferenecs?
     }

     public List<Favorite> getAll ()
     {
        // Return all Favourites, sorted by their SortOrder.
     }

     public Favorite create ( String name )
     {
        // Maybe a factory method that generates an unused id and returns a new Favourite instance?
     }
 }


 public Favourite
 {
     public final int id;
     public final Date createDate;
     public String name;
     public int sortOrder;

     public Favorite ( int id, String name, int sortOrder )
     {
         this.id = id;
         this.createDate = Date();
         this.name = name;
         this.sortOrder = sortOrder;
     }
 }


 public class MyActivity extend Activity
 {
      protected void onCreate ( Bundle savedInstanceState )
      {
           FavouritesManager favmanager = MyApplication.getMyApplicationInstance().getFavoritesManager();
      }

 {
}

关于java - 我如何用抽象类设计这些,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33826977/

相关文章:

java - 如何在Java中实现接口(interface)方法

c++ - 如何向上查询或向下查询接口(interface)指针?

java - AsyncTask 必须是抽象的

java - DecimalFormat.setMaximumIntegerDigits() 方法参数的说明

java - 使用 Unity 2018 时出现 Google Play 服务排行榜错误 (java.lang.ClassNotFoundException : com. google.games.bridge.TokenFragment)

java - 如何将 2d 数组从 java 传递到 flex(使用 BlazeDs)?

java - 在Android中如何在对话框中设置图像?

android - 具有成员(member)设计的移动应用程序

c# - 基于原生OpenCV的unity上的Android应用

java - 类内的 main() 与接口(interface)内的 main()