观察者模式涉及的对象:
- 观察者接口、观察者接口的实现类
- 被观察者接口、被观察者接口的实现类
1、观察者接口-代码:
public interface Observer {
void update(String msg);
}
2、观察者接口的实现类-代码:
public class ObserverImpl implements Observer{
private String name;
public ObserverImpl(String name){
this,name = name;
}
@Override
void update(String msg){
System.out.println(this.name+" 观察到了数据变化,接收到数据:"+msg);
}
public String getName() {
return name;
}
}
3、被观察者接口-代码:
public interface Subject {
// 绑定观察者
void attcah(ObserverImpl observer);
// 解绑观察者
void detcah(ObserverImpl observer);
// 将数据msg发给所有的观察者
void toNotifyAllObserver(String msg);
}
4、被观察者接口的实现类-代码:
public class SubjectImpl implements Subject {
private List<Observer> observerList = new ArrayList<>();
// 绑定观察者
void attcah(ObserverImpl observer){
System.out.println("正在绑定到观察者:"+observer.getName());
observerList.add(observer);
}
// 解绑观察者
void detcah(ObserverImpl observer){
System.out.println("正在解绑观察者:"+observer.getName());
observerList.remove(observer);
}
// 将数据msg发给所有的观察者
void toNotifyAllObserver(String msg){
for (Observer observer : observerList) {
observer.update(msg);
}
}
}
5、使用:
public class Main {
public static void main(String[] args) {
ObserverImpl observer1 = new ObserverImpl("观察者1");
ObserverImpl observer2 = new ObserverImpl("观察者2");
SubjectImpl subject = new SubjectImpl();
subject.attach(observer1);
subject.attach(observer2);
subject.toNotifyAllObserver("你好!");
subject.detach(observer1);
subject.detach(observer2);
}
}
/*
打印结果:
正在绑定到观察者:观察者1
正在绑定到观察者:观察者2
观察者1 观察到了数据变化,接收到数据:你好!
观察者2 观察到了数据变化,接收到数据:你好!
正在解绑观察者:观察者1
正在解绑观察者:观察者2
*/
标签:02,String,observer,void,观察者,ObserverImpl,msg,设计模式
From: https://www.cnblogs.com/cywdder/p/17555735.html