java观察者拓展(一)利用java内部的抽象对象和观察者接口

通过利用java的JDK自带类进行观察者模式的创建
在java中,jdk都帮我们实现好了抽象主题角色和抽象观察者。
我们只需要在上述的内容中创建两个类,
一个是具体的主题角色类继承 java.util.Observable这个类
另一个是具体的观察者角色实现java.util.Observable接口

首先我们创建具体的主题角色类 (在上述例子中的老师Teacher)

package com.whoami.jdk;
import java.util.Observable;
public class SpecificTeacherSbuject extends Observable {
//定义老师通知的内容
private String contex;
public String getContex() {
return contex;
}
public void setContex(String contex) {
this.contex = contex;
//通知观察者,在java实现观察者中,一定要先实现this.setChange();
this.setChanged();
//观察者实现模式的拉模式
//this.notifyObservers();
//观察者实现模式中的推模式,注意两种模式不能同时出现
this.notifyObservers(contex);
}
}

然后实现具体的观察者对象

package com.whoami.jdk;
import java.util.Observable;
import java.util.Observer;
public class SpecificStudentObserver implements Observer {
private String observerName;
private String observerThing;
//private String contex;
public String getObserverName() {
return observerName;
}
public void setObserverName(String observerName) {
this.observerName = observerName;
}
public String getObserverThing() {
return observerThing;
}
public void setObserverThing(String observerThing) {
this.observerThing = observerThing;
}
/**
* 使用java jdk中实现的观察者的接口。 update(Observable o, Object arg) 同时定义了推和拉两种方式。可根据选择改变
*/
@Override
public void update(Observable o, Object arg) {
//推模式
System.out.println(observerName+"收到"+arg+"将要:"+observerThing);
//拉模式
//contex = ((SpecificTeacherSbuject)o).getContex();
//System.out.println(observerName+"收到"+contex+"将要:"+observerThing);

}
}

最后我们实现一个测试类
主要有四步:
1.创建具体对象目标
2.创建具体的观察者
3.为对象添加观察者
4.对象更新,通知观察者

package com.whoami.jdk;

public class TestMain {
/**
* 实现java内部observer接口实现观察者的测试类
*/
public static void main(String[] args) {
//创建一个老师,目标
SpecificTeacherSbuject teacher = new SpecificTeacherSbuject();
//创建观察者学生
SpecificStudentObserver studentOne = new SpecificStudentObserver();
studentOne.setObserverName("小明");
studentOne.setObserverThing("扫教室");
SpecificStudentObserver studentTwo = new SpecificStudentObserver();
studentTwo.setObserverName("小明");
studentTwo.setObserverThing("扫工地");
//注册观察者
teacher.addObserver(studentOne);
teacher.addObserver(studentTwo);
//目标更新,老师发布通知
teacher.setContex("命令:打扫卫生");
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值