如何在Play中实现用户特定的类型泛型行为?

时间:2012-02-14 17:00:52

标签: java playframework data-modeling

说我想构建一个如下应用程序: 用户可以登录并创建一些观察机制,例如查找推特标签或每小时检查一些股票。

  1. 您必须拥有一个User对象,例如保存用户登录的电子邮件和密码。
  2. 您必须拥有一些Java代码,例如为股票和推特建立一个HttpURLConnection
  3. 您必须为这些服务保存用户特定的设置:例如userA想要#hashtag1但user2想要#anotherTag
  4. 出于科学目的,我不希望拥有这些观察者(推特,股票......)的所有可能组合,而是拥有“TwitterObserver”和“StocksObserver”扩展的抽象类“观察者”。

    我面临的问题是:

    我无法例如选择所有观察者(无论类型),迭代它们,检查是否已修改并对用户特定的行为做出反应。换句话说:我不能将通用的“Observer”类与具有此观察者的用户特定设置的类组合在一起。

    是否有任何设计模式或最佳实践来模拟此行为?我无法相信这一切都很难。

    我很感激每一个提示!谢谢你们

1 个答案:

答案 0 :(得分:0)

在GenericObserver类中,创建一个应用程序作业来收集特定类型:

public class Observer {
  // common properties and methods

  public static List<Observer> observers = new ArrayList<Observer>();

  public static void respondUserBehavior() {
    for (Observer observer: observers) {
      // call each observer to respond to user behavior
    }
  }

  @OnApplicationStart
  public static class ObserverCollector extends Job<?> {
    @Override public void doJob() {
      observers.addAll(play.Play.classLoader.getAssignableClasses(Observer.class));
      // or you might want to loop through the list and filter out the abstract classes
    }
  }
}