1.观察者模式有四个角色:
抽象被观察者角色:定义注册观察者,删除观察者和通知观察者方法。
具体被观察者角色:抽象被观察者角色的具体实现。
抽象观察者角色:定义一个接收消息更新方法。
具体观察者角色:抽象观察者角色的具体实现。
抽象被观察者角色接口定义:
package renchaofeng_observer;
public interface Observerable {
void registerObserver(Observer observer);//注册观察者
void removeObserver(Observer observer);//移除观察者
void notifyObserver();//通知观察者
void setMessage(String message);
}
具体被观察者实现:
package renchaofeng_observer;
import java.util.*;
public class ObserverableImpl implements Observerable {
List<Observer> observers = new ArrayList<Observer>();
private String message=null;
public void registerObserver(Observer observer) {
observers.add(observer);
}
public void removeObserver(Observer observer) {
if(!observers.isEmpty()) {
observers.remove(observer);
}
}
@Override
public void notifyObserver() {
for(Observer o : observers) {
o.update(message);
}
}
public void setMessage(String message) {
this.message = message;
};
}
抽象观察者接口定义:
package renchaofeng_observer;
public interface Observer {
void update(String message);//接收通知消息做出更改处理
}
具体观察者实现:
package renchaofeng_observer;
public class ObserverLi implements Observer {
@Override
public void update(String message) {
System.out.println("小李收到消息:"+message);
}
}
package renchaofeng_observer;
public class ObserverWang implements Observer {
@Override
public void update(String message) {
System.out.println("小王收到消息:"+message);
}
}
测试类:
package renchaofeng_observer;
import org.junit.Test;
public class ObserverTest {
@Test
public void testonef() {
Observerable obable = new ObserverableImpl();
Observer li = new ObserverLi();
Observer wang = new ObserverWang();
obable.registerObserver(li);
obable.registerObserver(wang);
obable.setMessage("谷歌牛逼。。");
obable.notifyObserver();
}
}
输出结果:
小李收到消息:谷歌牛逼。。
小王收到消息:谷歌牛逼。。
so,观察者介绍完毕。
参考:https://blog.csdn.net/u012233285/article/details/52966870