观察者模式两部分,两个部分共四个角色 ,两部分分别是观察者部分和通知者部分,观察者部分有 观察者角色,具体观察者角色,通知者部分有通知者角色,具体通知者角色,一般在java中,观察者角色和通知者角色为接口,具体观察者和具体通知者是对观察者和通知者的实现类。
一般观察者角色只要有一个方法,且叫做update(),
一般通知者有三个方法,add(),delete(),notify(),这三个方法称为增加,减少和通知。
过程就是, 通知者 这个类里面有一个 观察者角色类 的列表,改模式主要的过程就是运行观察者类列表中所有观察者类的update()的方法。也就是说当调用通知者类的notify() 时,会运行已经加载在观察者角色类的列表的所有对象的update()方法。
观察者接口
public interface Observer {
public void update();
}
具体观察者
public class ConcreteObserver implements Observer {
@Override
public void update() {
// TODO Auto-generated method stub
System.out.println("let have behaviour");
}
}
通知者接口
public interface Subject {
public void addObserver(Observer observer);
public void deleteObserver(Observer observer);
public void notifyObserver();
}
具体通知者
public class ConcreteSubject implements Subject {
ArrayList<Observer> list=new ArrayList<Observer>();
@Override
public void addObserver(Observer observer) {
// TODO Auto-generated method stub
list.add(observer);
}
@Override
public void deleteObserver(Observer observer) {
// TODO Auto-generated method stub
list.remove(observer);
}
@Override
public void notifyObserver() {
// TODO Auto-generated method stub
for (Observer l : list) {
l.update();
}
}
}测试类
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Subject subject=new ConcreteSubject();
Observer observer1=new ConcreteObserver();
Observer observer2=new ConcreteObserver();
subject.addObserver(observer1);
subject.addObserver(observer2);
subject.notifyObserver();
}
}运行的结果是
let have behaviour
let have behaviour
该模式说到底就是对一个list对象进行封装,封装后的类抽象为通知者类,list列表中的对象为观察者类,通知者类提供一个增加和一个删除list列表成员的方法,还有一个运行所有list列表中所有成员都共有的方法的方法。
然后将这通知者三个共有的方法抽象出来作为通知者的接口,将list列表中的成员(观察者)的要被操作的方法(update方法)抽象出来做来观察者的接口。
本文介绍了观察者模式的组成部分,包括观察者角色、具体观察者、通知者角色和具体通知者。在Java中,这些角色通常通过接口实现。观察者角色有一个update()方法,而通知者角色具备add()、delete()和notify()方法,用于添加、移除和通知观察者。当调用notify()时,所有已注册的观察者都会执行update()方法。观察者模式的核心是封装一个包含观察者对象的列表,并提供管理这些对象的方法,实现了对象行为的抽象和事件传递。

被折叠的 条评论
为什么被折叠?



