Есть ли веские основания для регистрации/отмены регистрации? если вы вызовете интерфейс *Listener
, я бы хотел зарегистрировать/отменить регистрацию (с точки зрения dev).
Я думаю, что вы можете достичь своей цели с помощью абстрактного класса AbstractListener, который регистрируется в конструкторе - но это не приятно с архитектурной точки зрения и не работает вокруг незарегистрированной.
например.
public abstract class AbstractUpdateReceiver {
public AbstractUpdateReceiver() {
register();
}
public abstract void onReceive(Update anUpdate);
// optional, only the user should react on registering
public abstract void onRegistered();
// optional, only the user should react on unregistering
public abstract void onUnregistered();
private void register() {
//...do register
onRegistered();
}
public void unregister() {
//do unregister
onUnregistered();
}
}
на on(Un)Registered
вызовов и реализация не является необходимым, если весь процесс регистрации должны быть скрыт от реализующего приложения. но для Дерегистрация, пользователь по-прежнему должен вызывать unregister()
, пока ваша база не предусматривает ничего подобного clearReceivers()
или clearReceiver(AbstractUpdateReceiver receiver)
другой (гораздо) более хорошее решение без чего-либо, как регистрация/регистрацией реализации в рамках от внедрение приложения будет фабрикой, выполняющей всю работу вместо абстрактного класса. в этом случае вам необходимо разделить абстрактный класс на обычный класс и интерфейс, нормальный класс обеспечивает и обрабатывает регистрацию, а интерфейс предоставляет метод для onUpdateReceived
. то у вас будет завод, который создает и возвращает класс из фреймворка.
public UpdateReceiver createUpdateReceiver(IUpdateReceiver wrapped) {
UpdateReceiver receiver = new UpdateReceiver(wrapped);
receiver.register(); //or register directly into a non-static factory
return receiver;
}
спасибо, что христианин за понимание :) – mohit