Как реализовать специфичное для пользователя типовое поведение в Play? - PullRequest
0 голосов
/ 14 февраля 2012

Скажем, я хотел создать приложение следующим образом: пользователь может войти в систему и создать несколько механизмов наблюдения, например, поиск хештега в твиттере или проверку некоторых акций каждый час.

  1. Вы должны иметьПользовательский объект, который, например, сохраняет электронную почту и пароль для входа пользователя в систему.
  2. У вас должен быть некоторый код Java, который, например, устанавливает HttpURLConnection, как для акций, так и для Twitter
  3. Вы должны сохранитьпользовательские настройки для этих сервисов: например, userA хочет # hashtag1, но user2 хочет # anotherTag

В научных целях я не хочу иметь все возможные комбинации этих наблюдателей (твиттер, акции, ...) но у меня есть абстрактный класс "Observer", который расширяет как "TwitterObserver", так и "StocksObserver" или что-то в этом роде.

Проблема, с которой я сталкиваюсь, такова:

Я не могунапример, выбрать всех наблюдателей (независимо от их типа), выполнить итерацию по ним, проверить, изменились ли они, и отреагировать на поведение конкретного пользователя.Другими словами: у меня не может быть общего класса "Observer" в сочетании с классами, содержащими пользовательские настройки для этого наблюдателя.

Существует ли какой-либо шаблон проектирования или наилучшая практика для моделирования этого поведения?Я не могу поверить, что это все так сложно.

Я благодарен за каждый намек!Спасибо, ребята

1 Ответ

0 голосов
/ 15 февраля 2012

В вашем классе 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
    }
  }
}
...