“`
直接上代码吧
1.//测试类
public class Client {
public static void main(String[] args) {
//新建观察者
ContreteOberver observerGirl = new ContreteOberver();
observerGirl.setObserverName("LJ的第一任");
observerGirl.setRemindTing("是我们第一次的约会,羊山公园,不见不散!");
ContreteOberver observerAnotherGirl = new ContreteOberver();
observerAnotherGirl.setObserverName("LJ的第二任");
observerAnotherGirl.setRemindTing("是我们第二次的约会,去总统府,不见不散!");
//目标
ConcreteWeatherSubject weather = new ConcreteWeatherSubject();
//注册观察者
weather.attach(observerGirl);
weather.attach(observerAnotherGirl);
//目标发布天气
weather.setWeatherContent("明天阳光明媚,蓝天白云,气温26度,很适合约会!");
}
}
2.
/**
* 具体的目标对象,负责把具体的有关状态存入到相关的观察者对象当中
* @author LJ
*
*/
public class ConcreteWeatherSubject extends WeahterSubject {
private String weatherContent;
public String getWeatherContent() {
return weatherContent;
}
public void setWeatherContent(String weatherContent) {
this.weatherContent = weatherContent;
this.notifyObservers();
}
}
3.
/**
* 具体的观察者状态,实现更新的方法,使自身的状态和目标的状态保持一致
* @author LJ
*
*/
public class ContreteOberver implements Observer {
private String observerName;
private String weartherContent;
private String remindTing;
public String getObserverName() {
return observerName;
}
public void setObserverName(String observerName) {
this.observerName = observerName;
}
public String getRemindTing() {
return remindTing;
}
public void setRemindTing(String remindTing) {
this.remindTing = remindTing;
}
@Override
public void update(WeahterSubject subject) {
weartherContent = ((ConcreteWeatherSubject)subject).getWeatherContent();
System.out.println(observerName+"收到了"+weartherContent+","+remindTing);
}
}
``
4./**
* 这是一个观察者的接口,定义一个更新的接口给哪些目标发生改变的时候通知的对象
* @author LJ
*
*/
public interface Observer {
public void update(WeahterSubject subject);
}
5.
/**
* 目标对象,提供注册和删除功能
* @author LJ
*
*/
public class WeahterSubject {
//用来保存注册的观察者对象
private List observeres = new ArrayList();
public void attach(Observer observer){
observeres.add(observer);
}
public void detach(Observer observer){
observeres.remove(observer);
}
protected void notifyObservers() {
for (Observer observer:observeres) {
observer.update(this);
}
}
}
“`