目录
-
目的
定义对象间的一种一对多依赖关系,当一个对象的状态发生改变时候,所有依赖于它的对象都得到通知并被自动更新。
-
应用实例
-
接水的时候,接水的人观察水位,当水位到一定程度时候便停止接水;
-
老师一布置任务,学生听到都得做。
-
代码
package com.gary.designpattern.observe;
/**
* 观察者接口IListenner
* 定义一个update()方法,当被观察者调用notifyListenner()方法时,观察者的update()方法会被回调
* @author gary
*
*/
public interface IListenner {
public void update(String info);
}
package com.gary.designpattern.observe;
/**
* 被观察者接口ISpeaker
* 声明添加删除通知观察者方法
* @author gary
*
*/
public interface ISpeaker {
public void addListenner(IListenner listenner);
public void removeListenner(IListennerlistenner);
public void notifyListenner();
}
package com.gary.designpattern.observe;
public class Student implements IListenner {
private String name;
private String info;
public Student(String name) {
this.name = name;
}
@Override
public void update(String info) {
this.info = info ;
read();
}
public void read() {
System.out.println("学生:" + name + " 接收到老师的消息 :" + info);
}
}
package com.gary.designpattern.observe;
import java.util.ArrayList;
import java.util.List;
public class Teacher implements ISpeaker {
private List<IListenner> listennerList;
private String info;
public Teacher() {
listennerList = new ArrayList<>();
}
@Override
public void addListenner(IListenner listenner) {
listennerList.add(listenner);
}
@Override
public void removeListenner(IListennerlistenner) {
listennerList.remove(listenner);
}
@Override
public void notifyListenner() {
for(int i = 0; i < listennerList.size();i++) {
IListenner lis = listennerList.get(i);
lis.update(info);
}
}
public void setInfo(String info) {
System.out.println("老师发送消息 : " +info);
this.info = info;
notifyListenner();
}
}
测试:
package com.gary.designpattern.observe;
public class Test {
public static void main(String[] args) {
Teacher teacher = new Teacher();
teacher.addListenner(new Student("张三"));
teacher.addListenner(new Student("李四"));
teacher.addListenner(new Student("王五"));
teacher.setInfo("大家好");
}
}
结果:
老师发送消息 : 大家好
学生:张三 接收到老师的消息 :大家好
学生:李四 接收到老师的消息 :大家好
学生:王五 接收到老师的消息 :大家好