定义对象间一种一对多的依赖关系,使得当每一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新。
实现一个简单的观察者和被观察者的示例。
1 import java.util.ArrayList; 2 import java.util.List; 3 4 public class Main 5 { 6 public static void main(String[] args) 7 { 8 Subject sub = new ConcreteSubject(); 9 sub.addObserver(new ConcreteObserver1()); //添加观察者1 10 sub.addObserver(new ConcreteObserver2()); //添加观察者2 11 sub.doSomething(); 12 } 13 14 /** 15 * 观察则接口 16 */ 17 public interface Observer 18 { 19 void update(); 20 } 21 22 /** 23 * 被观察者基类 24 */ 25 public static abstract class Subject 26 { 27 private List<Observer> obs = new ArrayList<>(); 28 29 public void addObserver(Observer obs) 30 { 31 this.obs.add(obs); 32 } 33 34 public void delObserver(Observer obs) 35 { 36 this.obs.remove(obs); 37 } 38 39 protected void notifyObserver() 40 { 41 for (Observer o : obs) 42 { 43 o.update(); 44 } 45 } 46 47 public abstract void doSomething(); 48 } 49 50 /** 51 * 观察者对象1 52 */ 53 public static class ConcreteObserver1 implements Observer 54 { 55 public void update() 56 { 57 System.out.println("观察者1收到信息,并进行处理。"); 58 } 59 } 60 61 /** 62 * 观察者对象2 63 */ 64 public static class ConcreteObserver2 implements Observer 65 { 66 public void update() 67 { 68 System.out.println("观察者2收到信息,并进行处理。"); 69 } 70 } 71 72 /** 73 * 具体的被观察者 74 */ 75 public static class ConcreteSubject extends Subject 76 { 77 public void doSomething() 78 { 79 System.out.println("被观察者事件反生"); 80 this.notifyObserver(); 81 } 82 } 83 }
原文:http://www.cnblogs.com/hammerc/p/4743810.html