Alexmody
07.01.2011, 22:09
При реализации паттерна Observer (наблюдатель) появились вопросы по реализации
универсального получения/передачи данных.
Есть BaseSubject (субъект/model в MVC- кто рассылает события всем подписавшимся
обозревателям) от него наследуются два класса SubjectA и SubjectB.
Есть класс BaseData от котрого наследуются DataA (имеет переменные level, score),
и DataB (имеет переменные time, coins).
В данном случае данные DataA и DataB создаются отдельно от BaseSubject/model в MVC,
но на них предается ссылка в соотв. экземпляр SubjectA и SubjectB.
В BaseSubject есть ф-я изменения данных (для дальнейшей рассылки обозревателям) в
которую входит параметр класса BaseData, т.е. ф-я может принять вышеописанные
SubjectA и SubjectB.
public class SubjectA/SubjectB extends BaseSubject
{
public function setData(data:BaseData):void
{
if(data is DataA)
{
this.data.level = data.level;
this.data.score = data.score;
}
if(data is DataB)
{
this.data.time = data.time;
this.data.coins = data.coins;
}
//передаем данные всем подписанным обозревателям.
notifyObservers();
}
}
Как видно выше передается нужный класс данных типа BaseData, обычно в примерах
паттерна Observer принимается перечисленные переменные: setData(level:int, score:int):void,
но куда удобнее применить общий тип данных для всех экземпляров наследуемых от
BaseSubject, но в это же время появляется проблема с обработкой этих данных.
Тот пример, что привел выше мне не нравится, нагромождение и не универсально, приходится
с каждым новым типом данных прописывать дополнительные применять if.
Можно еще предварительно не поставлять входящие данные а в функцию setData(…) класса
BaseSubject, а запрашивать объект DataA/DataB ф-й GetData():BaseData, и изменять
его возвращенные данные.
В экземплярах классов Observer прием данных тот же:
public override function updateData(data:BaseData):void
Посоветуйте, как лучше организовать передачу данных реализуя паттерн Observer, при
этом желательно, чтобы отправленные/полученные данные были в виде класса, а не
набора кучи параметров функции.
универсального получения/передачи данных.
Есть BaseSubject (субъект/model в MVC- кто рассылает события всем подписавшимся
обозревателям) от него наследуются два класса SubjectA и SubjectB.
Есть класс BaseData от котрого наследуются DataA (имеет переменные level, score),
и DataB (имеет переменные time, coins).
В данном случае данные DataA и DataB создаются отдельно от BaseSubject/model в MVC,
но на них предается ссылка в соотв. экземпляр SubjectA и SubjectB.
В BaseSubject есть ф-я изменения данных (для дальнейшей рассылки обозревателям) в
которую входит параметр класса BaseData, т.е. ф-я может принять вышеописанные
SubjectA и SubjectB.
public class SubjectA/SubjectB extends BaseSubject
{
public function setData(data:BaseData):void
{
if(data is DataA)
{
this.data.level = data.level;
this.data.score = data.score;
}
if(data is DataB)
{
this.data.time = data.time;
this.data.coins = data.coins;
}
//передаем данные всем подписанным обозревателям.
notifyObservers();
}
}
Как видно выше передается нужный класс данных типа BaseData, обычно в примерах
паттерна Observer принимается перечисленные переменные: setData(level:int, score:int):void,
но куда удобнее применить общий тип данных для всех экземпляров наследуемых от
BaseSubject, но в это же время появляется проблема с обработкой этих данных.
Тот пример, что привел выше мне не нравится, нагромождение и не универсально, приходится
с каждым новым типом данных прописывать дополнительные применять if.
Можно еще предварительно не поставлять входящие данные а в функцию setData(…) класса
BaseSubject, а запрашивать объект DataA/DataB ф-й GetData():BaseData, и изменять
его возвращенные данные.
В экземплярах классов Observer прием данных тот же:
public override function updateData(data:BaseData):void
Посоветуйте, как лучше организовать передачу данных реализуя паттерн Observer, при
этом желательно, чтобы отправленные/полученные данные были в виде класса, а не
набора кучи параметров функции.