Я понимаю, что эта тема была покрыта до смерти, но я все еще борюсь и мог бы сделать с некоторой конкретной помощью.
Моя цель — реализовать простой шаблон наблюдателя между каким-то наблюдаемым (скажем, собакой) и каким-то слушателем (скажем, владельцем).
В конце концов, Owner станет «представлением», а Dog — «моделью» в парадигме MVC. Я использую Dog и Owner только для того, чтобы попытаться упростить ситуацию.
Я попытался использовать встроенные в Java классы Observer/Observable, но понял, насколько плох метод update() Observers - он получает POJO, и мне нужно будет проверить/привести этот POJO в методе update(). Я бы предпочел, чтобы мой метод update() получал то, что он может ожидать.
Итак, я следовал нескольким руководствам, в том числе этому, в котором в качестве примера используется собака/владелец:
http://www.youtube.com/watch?v=qw0zZAte66A
Здесь мне показали, как свернуть мои собственные классы Observer/Observed. В псевдокоде у меня сейчас есть следующее:
Dog/Model {
List listeners;
public fireDogHungryEvent() {
foreach listener {
listener.onDogHungry(this);
}
}
public fireDogPeeEvent() {
foreach listener {
listener.onDogNeedsToPee(this);
}
}
public getHungerLevel() { return hungerLevel; }
public getBladderCapacity() { return bladderCapacity; }
}
Owner/View {
public onDogHungry(model) {
println(model.getHungerLevel());
}
public onDogNeedsToPee(model) {
println(model.getBladderCapacity());
}
}
Итак, теперь вместо одного метода update() у меня есть методы, обрабатывающие определенные события. Блестящий. В настоящее время я доволен классом Owner/view. Он знает о методах Собаки/модели, и это нормально (я думаю).
Что мне не нравится, так это то, что Dog/model имеет ссылки на методы в Owner/view. Я читал бесчисленное количество раз и полностью согласен с тем, что модель не должна быть тесно связана со своими взглядами, как это кажется выше. Я также не заинтересован в том, чтобы все «огненные» методы в Dog/model делали почти одно и то же; перебирая всех своих слушателей и просто вызывая разные методы для каждого слушателя.
Можно ли еще больше отделить эту связь и не использовать специальные методы вызова Dog/model? Если да, то как лучше всего получить данные о собаке/модели в поле «Владелец/представление» и правильно с ними работать?
Спасибо
Dog
имеют ссылки на представление? Я ничего не вижу. - person SJuan76   schedule 11.05.2013