1 package edu.aeon.model.oberserver; 2 3 /** 4 * 通职者接口 5 * @author lzj 6 * 2017年10月26日 下午4:22:29 7 */ 8 public interface Notify { 9 /** 10 * 注册一个观察者 11 * at 2017年10月26日 下午4:20:31 by lzj 12 * @Parameters1 Watcher watcher 13 * @Returns void 14 */ 15 public void addWatcher(Watcher watcher); 16 /** 17 * 删除一个观察者 18 * at 2017年10月26日 下午4:21:19 by lzj 19 * @Parameters1 Watcher watcher 20 * @Returns void 21 */ 22 public void removeWatcher(Watcher watcher); 23 /** 24 * 通知观察者 25 * at 2017年10月26日 下午4:21:47 by lzj 26 * @Parameters1 无 27 * @Returns void 28 */ 29 public void notifyWatcher(String str); //通知观察者 30 }
1 package edu.aeon.model.oberserver; 2 import java.util.ArrayList; 3 import java.util.List; 4 5 /** 6 * 观察者的添加、删除、以及接收到观察者动态变化时做出的相应行为 7 * @author lzj 8 * @create 2017年10月26日 下午4:26:49 9 * @describe 10 */ 11 public class Watched implements Notify { 12 13 private List<Watcher> list=new ArrayList<Watcher>(); 14 /* (non-Javadoc) 15 * @see edu.aeon.model.oberserver.Watched#addWatcher(edu.aeon.model.oberserver.Watcher) 16 */ 17 @Override 18 public void addWatcher(Watcher watcher) { 19 list.add(watcher); 20 } 21 22 /* (non-Javadoc) 23 * @see edu.aeon.model.oberserver.Watched#delWatcher(edu.aeon.model.oberserver.Watcher) 24 */ 25 @Override 26 public void removeWatcher(Watcher watcher) { 27 list.remove(watcher); 28 } 29 30 /* (non-Javadoc) 31 * @see edu.aeon.model.oberserver.Watched#notifyWatcher(java.lang.String) 32 */ 33 @Override 34 public void notifyWatcher(String str) { 35 //for循环更新所有观察者的状态 36 for(Watcher watcher : list) { 37 watcher.update(str); 38 } 39 } 40 }
1 package edu.aeon.model.oberserver; 2 3 /** 4 * 观察者接口 5 * @author lzj 6 * @create 2017年10月26日 下午4:24:55 7 */ 8 public interface Watcher { 9 public void update(String str); 10 }
1 package edu.aeon.model.oberserver; 2 3 /** 4 * @author lzj 5 * @create 2017年10月26日 下午4:30:45 6 * @describe 7 */ 8 public class Person1 implements Watcher{ 9 10 /* (non-Javadoc) 11 * @see edu.aeon.model.oberserver.Watcher#update(java.lang.String) 12 */ 13 @Override 14 public void update(String str) { 15 System.out.println(this.getClass().getName().toString()+str); 16 } 17 18 }
1 package edu.aeon.model.oberserver; 2 3 /** 4 * @author lzj 5 * @create 2017年10月26日 下午4:39:28 6 * @describe 7 */ 8 public class Person2 implements Watcher { 9 10 /* (non-Javadoc) 11 * @see edu.aeon.model.oberserver.Watcher#update(java.lang.String) 12 */ 13 @Override 14 public void update(String str) { 15 System.out.println(this.getClass().getName().toString()+str); 16 } 17 18 }
1 package edu.aeon.model.oberserver; 2 3 /** 4 * @author lzj 5 * @create 2017年10月26日 下午12:46:37 6 * @describe 7 */ 8 public class TestObserver { 9 10 /** 11 * at 2017年10月26日 下午12:46:37 by lzj 12 * @Parameters1 13 * @Returns void 14 */ 15 public static void main(String[] args) { 16 Notify n=new Watched(); 17 Person1 p1=new Person1(); 18 Person2 p2=new Person2(); 19 //注册两位观察者对象、然后开启广播 20 n.addWatcher(p1); 21 n.addWatcher(p2); 22 //广播通知注册的两位观察者:下雨了、去收衣服 ! 23 n.notifyWatcher("下雨了、去收衣服 !"); 24 } 25 }
测试结果: