观察者模式是使用率很高的一种模式,又称订阅模式,最主要优点便是程序的解耦了
Subject 抽象主题,也就是被观察的角色
ConcreteSunbject:具体主题,该角色将有关状态存入具体观察者对象,在具体主题的内部状态发生改变时,给所有注册过的观察者发出通知
Observer:抽象观察者,该角色是观察者的抽象类,它定义了一个更新的接口,使得在得到主题的更改通知时更新自己
ConcreteObserver:具体的观察者
/**观察者**/
public class Studentimplements Observer{
String name;
public Student(String aname){
this.name = aname;
}
@Override
public void update(Observable arg0, Object arg1) {
System.out.println("my"+name);
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "namn"+name;
}
}
/**被观察者,当他有更新时所有的观察者都会接到相应的通知**/
public class School extends Observable{
public void ParsePosition(){
setChanged();
/**通知所有的观察者**/
notifyObservers();
}
}
/**测试代码**/
public class Main {
public static void main(String[] args){
Student student1 = new Student("1");
Student student2 = new Student("2");
Student student3 = new Student("3");
School school = new School();
school.addObserver(student1);
school.addObserver(student2);
school.addObserver(student3);
school.ParsePosition();
}
}
Subject 抽象主题,也就是被观察的角色
ConcreteSunbject:具体主题,该角色将有关状态存入具体观察者对象,在具体主题的内部状态发生改变时,给所有注册过的观察者发出通知
Observer:抽象观察者,该角色是观察者的抽象类,它定义了一个更新的接口,使得在得到主题的更改通知时更新自己
ConcreteObserver:具体的观察者
/**观察者**/
public class Studentimplements Observer{
String name;
public Student(String aname){
this.name = aname;
}
@Override
public void update(Observable arg0, Object arg1) {
System.out.println("my"+name);
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "namn"+name;
}
}
/**被观察者,当他有更新时所有的观察者都会接到相应的通知**/
public class School extends Observable{
public void ParsePosition(){
setChanged();
/**通知所有的观察者**/
notifyObservers();
}
}
/**测试代码**/
public class Main {
public static void main(String[] args){
Student student1 = new Student("1");
Student student2 = new Student("2");
Student student3 = new Student("3");
School school = new School();
school.addObserver(student1);
school.addObserver(student2);
school.addObserver(student3);
school.ParsePosition();
}
}