-
-
qq_慕前端2019431
2019-08-07
观察者模式subject订阅发布
-
0赞 · 0采集
-
-
慕粉3351191
2018-05-21
客户端操作
-
截图
0赞 · 0采集
-
-
Samrong
2018-03-31
统一通知,各自处理
-
截图
0赞 · 0采集
-
-
疯狂的二进制
2018-03-28
观察者的好处:统一通知,各自处理
-
截图
0赞 · 0采集
-
-
weibo_我no笨笨熊_03326800
2017-07-13
- 观察模式的好处:统一通知,各自处理;
-
0赞 · 0采集
-
-
蜗牛__
2017-04-16
- 观察者模式总结----(二)
/**
* 观察者的具体实现---天气预报
*/
public class WeatherSubject extends Subject
{
private String weatherState; //当前天气状态
public String getWeatherState()
{
return weatherState;
}
/**
* 当天气的状态发生改变的时候,要通知到所有的观察者
* @param weatherState
*/
public void setWeatherState(String weatherState)
{
this.weatherState = weatherState;
notifyAllObserver(weatherState);//调用父类的方法,通知所有的观察者。告知其天气状态
}
}
/**
* 观察者,有update接口,用来接受目标类的通知
*/
public interface Observer
{
/**
* @param obj 目标类 调用(通知) 观察者对象该方法时,传入的通知内容
*/
void update(Object obj);
}
测试
WeatherSubject subject=new WeatherSubject(); //创建天气目标对象
subject.attach(new Observer()
{
public void update(Object obj)
{
System.out.println("我是观察者A,天气为"+obj);
}
}); //增添观察者
subject.attach(new Observer()
{
public void update(Object obj)
{
System.out.println("我是观察者B,天气为"+obj);
}
});
System.out.println("通知前。。。。");
subject.setWeatherState("晴天");
System.out.println("通知后。。。。");
-
1赞 · 0采集
-
-
蜗牛__
2017-04-16
- 观察者模式总结-----(一)
/**
* 观察者模式: 一个目标类,多个观察者(用来观察目标)。
* 当目标类发生变化时,可以通知到他的所有观察者。
*
* 原理:利用回掉函数机制。 所有“观察者类”继承一个“接口”(如Observer),该接口中有一个
* 方法(如,update())。将所有的观察者增添到“目标类”的“链表”中,当目标类的状态发生改变时,
* 目标类可以遍历链表中的所有观察者,调用其update通知到所有的观察者。
*
* 案例描述:有一个 天气预报(目标) 类,许多观察者类(如,网站,人等)需要第一时间得知天气的变化,
* 然后做各自的处理。
*/
/**
* 目标类,用来增,删观察者,通知观察者
*/
public class Subject
{
private List<Observer> observerList=new ArrayList<>();//存储观察该目标的观察者
/**
* 增添一个观察者
* @param observer 要增添的观察者
*/
public void attach(Observer observer)
{
observerList.add(observer);
}
/**
* 删除一个观察者
* @param observer 要删除的观察者
*/
public void detach(Observer observer)
{
observerList.remove(observer);
}
/**
* 通知所有的观察者
* @param obj 要通知的信息
*/
public void notifyAllObserver(Object obj)
{
for(Observer observer: observerList)
{
observer.update(obj);//遍历所有的观察者,依次调用其update方法。
}
}
}
-
2赞 · 0采集
-
-
慕粉2239218538
2017-03-09
- 111
-
截图
0赞 · 0采集
-
-
Lgin
2017-03-06
- 观察者的好处:统一通知,各自处理
-
截图
0赞 · 0采集
-
-
ub8
2017-02-03
- 在目标的实现中的 setWeatherContent 方法时 调用观察者中的方法update 观察者update方法通过 目标方法提供的状态变更方法 得到当前状态
-
截图
0赞 · 0采集
-
-
慕尼黑4302789
2016-07-12
- 具体的应用步骤:
1:创建目标(实例化目标类)
2:创建和设置观察者(实例化观察者并且设置观察者的字段)
3:调用目标实例的添加方法把观察者加入目标类的观察队列中
4:改变目标类的状态
-
截图
0赞 · 1采集
-
-
慕尼黑4302789
2016-07-12
- 实现观察者类的Update方法,用来从目标对象中接收消息,并且打印消息
-
截图
0赞 · 0采集
-
-
慕尼黑4302789
2016-07-12
- 定义好三个变量以后然后再设置set和get方法
-
截图
0赞 · 0采集
-
-
慕尼黑4302789
2016-07-12
- 需要添加三个变量
-
截图
0赞 · 0采集
-
-
慕尼黑4302789
2016-07-12
- 完成Subject类的重构
-
截图
0赞 · 0采集
-
-
慕尼黑4302789
2016-07-12
- 修改具体目标类的方法,当一修改了字段以后就立马调用父类的统治方法
-
截图
0赞 · 0采集
-
-
黑白K
2016-06-24
- 统一通知,各自处理。
-
截图
0赞 · 0采集
-
-
黑白K
2016-06-24
- 订阅者也就是观察者:黄明的老妈和黄明的女朋友
实现:当天气更新时,黄明老妈和黄明女朋友会收到各自的天气信息内容。
代码流程:定义一个跟天气有关的目标对象,内部有订阅者的列表,以及attach添加订阅者、detach删除订阅者以及通知订阅者并调用订阅者自有的update(目标对象)更新目标状态的方法。在具体的实现中,添加了天气内容的属性,生成get/set方法使得外部可以调用,当设置新的天气内容时,除了给属性赋值以外,还要调用父类的notifyObserver().update(天气内容)通知订阅者更新目标对象。在订阅者中,除了有接口的update(目标对象)方法外,想要完整的接收内容还必须有自己独特的属性,也就是订阅者自己的名字和通知信息,这两个参数是订阅者决定的,而天气信息是从目标对象中获取的,这里是调用了update(ConcreteWetherSubjetc weather)接收最新的目标对象,并通过getWetherSubject()强制转换为具体的实现来获得最新的天气信息。然后输出订阅者名字+天气信息+通知信息。
测试流程是:创建目标对象,创建订阅者(创建订阅者的名称以及通知信息),然后调用目标对象的attach添加订阅者,当调用目标对象的setWeatherContent()添加信息时,目标对象的状态发生改变,便通知订阅者更新内容。打印内容输出到控制台。
-
截图
1赞 · 0采集
-
-
杯底囚人
2016-05-11
- 观察者类所需的变量
-
截图
0赞 · 0采集
-
-
庄学爸
2016-04-29
- 在实际开发中,如果意识到模块功能是观察者模式,则可以对通用观察者模式的代码进行套用.
例子:
1.抽象主题角色是具体主题角色统一的一个接口.
(知道订阅的人的基本信息,以及有添加和删除和通知订阅的人的方法)
2.可以有很多具体主题角色实现类,代表不同的具体主题,如天气预报主题实现类,可以实例化多个具体主题的对象,初始化不同属性即可,即不同地区的天气预报情况,具体主题角色都继承抽象主题角色.
(不同的具体主题角色对象会有自己的状态信息,即不同地区的天气预报信息,且不同具体主题角色对象中保存的订阅者一般不同,所以具体主题角色类只通知订阅了该具体主题角色类的订阅者)
3.抽象观察者角色是所有订阅不同具体主题的人的一个接口.
(存在更新方法的接口,参数是抽象主题角色类型,以便订阅情况不同的观察者可以获取对应不同的具体主题的状态信息,所有订阅情况不同的具体观察者角色类都会实现该更新方法,作出不同的业务逻辑)
4.具体观察者角色是某类特定的人订阅某个具体主题,可以有多个具体观察者的类,代表订阅不同具体主题的人群,不同实现类在更新方法上可以作出自己相应的操作,每个类又可以实例化多个具体观察者角色对象,代表订阅同一具体主题的人群,初始化不同的属性即可.
(类中除了提供用来保存具体观察者同步被观察者的状态信息属性外,还可以创建用来存放具体观察者的其他属性,如观察者的名字、具体观察者状态发生改变时需提醒具体观察者的内容等.只有保持同步信息的属性是从被观察者中获取的,其他属性都是由观察者自己设置,当具体主题角色调用Notify()方法后会自动调用观察者的update()方法)
测试类中:
1.首先创建一个具体主题角色对象.
2.创建具体观察者对象,可以任意个,初始化观察者的属性.
3.注册观察者到具体主题角色的观察者列表中.
4.具体主题角色更新状态信息(发布信息)
观察者模式的好处就是统一通知,各自处理.
-
截图
0赞 · 0采集
-
-
TTKatrina
2016-01-27
- 注意掌握这种思想,在代码实现的结构上,会根据需求或个人习惯有所不同,但蕴含的观察者、订阅者思想是统一的。
1、创建目标
2、创建观察者
3、注册观察者
4、目标发布内容
-
截图
0赞 · 0采集
-
-
萧吻
2015-09-30
- 统一通知,各自处理
-
0赞 · 0采集
-
-
咸鱼蒸蛋
2015-07-29
- 。。。。
-
截图
0赞 · 0采集
-
-
咸鱼蒸蛋
2015-07-29
- mark
-
0赞 · 0采集
-
-
csudonar
2015-07-26
- 模式的秘密就是各种利用多态
-
0赞 · 0采集
-
-
csudonar
2015-07-26
- 统一通知,各自处理
-
0赞 · 0采集
-
-
wghusw
2015-07-18
- 观察者的好处:统一通知,各自处理
-
0赞 · 0采集