设计模式 观察者模式

来源:互联网 发布:数据库考试题库 编辑:程序博客网 时间:2024/06/04 23:58

观察者模式两部分,两个部分共四个角色 ,两部分分别是观察者部分和通知者部分,观察者部分有 观察者角色,具体观察者角色,通知者部分有通知者角色,具体通知者角色,一般在java中,观察者角色和通知者角色为接口,具体观察者和具体通知者是对观察者和通知者的实现类。

一般观察者角色只要有一个方法,且叫做update(),

一般通知者有三个方法,add(),delete(),notify(),这三个方法称为增加,减少和通知。

过程就是, 通知者 这个类里面有一个 观察者角色类 的列表,改模式主要的过程就是运行观察者类列表中所有观察者类的update()的方法。也就是说当调用通知者类的notify() 时,会运行已经加载在观察者角色类的列表的所有对象的update()方法。


观察者接口

public interface Observer {public void update();}

具体观察者
public class ConcreteObserver implements Observer {@Overridepublic void update() {// TODO Auto-generated method stubSystem.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>();@Overridepublic void addObserver(Observer observer) {// TODO Auto-generated method stublist.add(observer);}@Overridepublic void deleteObserver(Observer observer) {// TODO Auto-generated method stublist.remove(observer);}@Overridepublic void notifyObserver() {// TODO Auto-generated method stubfor (Observer l : list) {l.update();}}}

测试类

public class Test {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubSubject 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方法)抽象出来做来观察者的接口。

0 0
原创粉丝点击