java中的观察者设计模式
我已经为一个观察者和可观察的设计模式发送了以下通知java中的观察者设计模式,java,design-patterns,Java,Design Patterns,我已经为一个观察者和可观察的设计模式发送了以下通知 private void changeEnvironment() { Random random = new Random(); season = SEASON[random.nextInt(3)]; dayInTime = DAY_IN_TIME[random.nextInt(2)]; temperature = random.nextInt(120);
private void changeEnvironment()
{
Random random = new Random();
season = SEASON[random.nextInt(3)];
dayInTime = DAY_IN_TIME[random.nextInt(2)];
temperature = random.nextInt(120);
setChanged();
notifyObservers(season);
notifyObservers(dayInTime);
notifyObservers(temperature);
}
然而,在我的发言中:
public void update(Observable o, Object arg) {
}
如何检查是季节、白天还是温度?根据您的代码,
更新中的arg
将是季节、白天还是温度之一。notifyObservers()
的参数是传递给update()
的参数
您可能希望在自定义“事件”对象中包含更多元数据,并将其用作调用notifyobserver()
的参数 根据您的代码,更新中的arg
将是季节、日期或温度之一。notifyObservers()
的参数是传递给update()
的参数
您可能希望在自定义“事件”对象中包含更多元数据,并将其用作调用notifyobserver()
的参数 您可以调用notifyObservators(“季节”)
并且在观察者的更新(可观察的o,对象arg)
中,第二个参数将是字符串“季节”
或者声明一个enum MyAttr{seasure,DayInTime,Temperature}
并调用notifyobservators(MyAttr.seasure)代码>您可以调用通知观察员(“季节”)
并且在观察者的更新(可观察的o,对象arg)
中,第二个参数将是字符串“季节”
或者声明一个enum MyAttr{seasure,DayInTime,Temperature}
并调用notifyobservators(MyAttr.seasure)
您可以在拉模式下使用observable模式,这意味着observable将自身传递给observable的更新()
。因此,observable可以从observable的getter中获取所需的属性
我假设你的主题中的温度
,白天
,季节
都是int
因此,您的可观察的(即受试者)将如下所示:
public class Subject extends Observable{
private int temperature;
private int dayInTime;
private int season;
private void changeEnvironment() {
Random random = new Random();
this.season = SEASON[random.nextInt(3)];
this.dayInTime = DAY_IN_TIME[random.nextInt(2)];
this.temperature = random.nextInt(120);
setChanged();
/** Notify all of the subscribed observers about its changes
It will call each observers' update(this, null)***/
notifyObservers();
}
public int getTemperature(){....}
public int getdayInTime(){.....}
public int getSeason(){....}
}
然后,您的观察者可以使用您的可观察对象的相应getter获得温度、dayInTime和季节:
public void update(Observable o, Object arg) {
Subject = (Subject) o;
int temperature = o.getTemperature();
int dayInTime= o.getdayInTime();
int season= o.getSeason();
}
您可以在pull模式下使用observable模式,这意味着observable将自身传递给observable的update()
。因此,observable可以从observable的getter获取所需的属性
我假设你的主题中的温度
,白天
,季节
都是int
因此,您的可观察的(即受试者)将如下所示:
public class Subject extends Observable{
private int temperature;
private int dayInTime;
private int season;
private void changeEnvironment() {
Random random = new Random();
this.season = SEASON[random.nextInt(3)];
this.dayInTime = DAY_IN_TIME[random.nextInt(2)];
this.temperature = random.nextInt(120);
setChanged();
/** Notify all of the subscribed observers about its changes
It will call each observers' update(this, null)***/
notifyObservers();
}
public int getTemperature(){....}
public int getdayInTime(){.....}
public int getSeason(){....}
}
然后,您的观察者可以使用您的可观察对象的相应getter获得温度、dayInTime和季节:
public void update(Observable o, Object arg) {
Subject = (Subject) o;
int temperature = o.getTemperature();
int dayInTime= o.getdayInTime();
int season= o.getSeason();
}
如果应同时将季节
、白天时间
和温度
发送给观察者,则最好拨打:
notifyObservers(season, dayInTime, temperature)
而Observer
可以有一个方法更新(对象季节、对象日期时间、对象温度)
,现在你知道是季节、日期时间还是温度了。如果季节
,日期时间
和温度
应该同时发送给观察者,最好调用:
notifyObservers(season, dayInTime, temperature)
观测者可以有一个方法更新(对象季节、对象日期时间、对象温度)
,现在你知道是季节、日期时间还是温度。季节和日期时间的类型是什么?你可能会感兴趣。它描述了如何使用现代Java工具构建观察者设计模式实现季节和白天的类型是什么?你可能会感兴趣。它描述了如何使用现代Java工具构建观察者设计模式实现