java观察者模式

来源:互联网 发布:伦敦留学 知乎 编辑:程序博客网 时间:2024/06/15 03:44

1、定义

        观察者模式定义了对象之间的一对多的依赖关系,这样一来,当一个对象的状态发生变化时,它的所有依赖者都会收到通知并自动更新。

2、特点

      抽象主题(Subject)角色(提供一个接口可以加上或撤销观察者对象)、抽象观察者(Observer)角色(为所有的具体观察者定义一个接口,在得到通知时更新自己) 具体主题角色保存对具体观察者对象有用的内部状态;在这种内部状态改变时给其观察者发出一个通知;具体主题角色又叫作具体被观察者角色)、具体观察者角色(保存一个指向具体主题对象的引用;和一个与主题的状态相符的状态。具体观察者角色实现抽象观察者角色所要求的更新自己的接口,以便使本身的状态与主题的状态匹配)。

3、UML类图

       

4、Demo

import java.util.ArrayList; interface Observer{public void update(String message);}  class ConcreteObserver implements Observer { public ConcreteObserver(Subject subject) { subject.registerObserver(this);}@Overridepublic void update(String message) {System.out.println(message);} }  interface Subject{public void registerObserver(Observer o);public void removeObserver(Observer o);public void notifyObservers();} class ConcreteSubject implements Subject{   private ArrayList<Observer> observers;   private String message;      public ConcreteSubject() {   observers = new ArrayList<Observer>();   }@Overridepublic void registerObserver(Observer o) {observers.add(o);}@Overridepublic void removeObserver(Observer o) {int i = observers.indexOf(o);if (i > 0){observers.remove(i);}}@Overridepublic void notifyObservers() {for (int i = 0; i < observers.size(); i ++){Observer observer = observers.get(i);observer.update(message);}}public void setMessage(String message){this.message = message;notifyObservers();}}public class ObserverGenerater{public static void main(String[] args) {ConcreteSubject subject = new ConcreteSubject();ConcreteObserver  concreteObserver= new ConcreteObserver(subject);subject.setMessage("Hello World");subject.setMessage("test");}}


5、Java的观察者模式实现

     

原创粉丝点击