-
-
梦编猿
2016-08-01
- 模式的秘密---观察者模式——区别对待观察者场景关键实现
【温馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等编程爱好者关注我,加我慕课好友,互相学习,共同进步!】
-
截图
1赞 · 0采集
-
-
慕尼黑4302789
2016-07-13
- 在目标的实现类中先根据状态的情况进行判断 如果满足的话再判断 观察者的名字然后再进行更新
-
截图
0赞 · 0采集
-
-
慕尼黑4302789
2016-07-13
- 在观察者的接口中要有获取和设置观察者名字的方法,因为在目标类中需要知道观察者的名字然后再根据名字进行不同的处理
-
截图
0赞 · 0采集
-
-
庄学爸
2016-04-30
- 区别对待观察者
即有些观察者要求当更新的天气预报信息为下雨才去通知它们,如果天气晴朗就不需要通知.而不像其他观察者一样,不管天气是否下雨还是晴天,都会去通知它们.
实现具体主题角色根据不同的状态信息来选择对部分观察者进行通知功能,只需使用传统方式.
在抽象观察者接口中声明一个获取具体观察者不需更新的内容的方法.方法返回字符串数组.
在具体观察者中创建字符串数组存放不需要更新的信息内容,并实现方法,返回该数组.
在抽象主题角色使用推模式声明notify()抽象方法,具体主题角色中实现notify()方法,方法中获取具体主题角色的状态信息,在遍历观察者列表时,判断当前要更新的信息是否是观察者需要的.如果符合,则对观察者进行更新,不符合则不更新.
具体主题角色:
public class ConcreteSubject extends Subject{
//存放状态信息
private String state;
public String void getState(){
return state;
}
public void setState(String state) {
this.state = state;
//使用拉模型
this.notifyObserver();
}
public void notifyObserver(){
//获取准备更新的内容.
String Temp=this.getState();
//此标记用来判断是否要更新,默认要.
Boolean isUpdate=true;
//循环遍历观察者
for(Observer observer:observers){
//循环遍历观察者不需要更新的内容.
for(String arg: observer.getNoUpdate()){
if(Temp.equals(arg){
isUpdate=false;
break;
}
}
if(isUpdate){
observer.update(this);
}else{
//重置更新标识为true.
isUpdate=true;
}
}
}
}
-
0赞 · 0采集
-
-
李成0
2015-12-10
- 状态变更调用通知方法,通知方法调用观察者,同时回调目标对象
-
截图
0赞 · 0采集