直接上代码
java
package yct.com.watcher.test; import yct.com.watcher.Watched; import yct.com.watcher.impl.BoyWatched; import yct.com.watcher.impl.BoyWatcher; import yct.com.watcher.impl.GrilWatcher; /** * 观察者模式测试类 * @author 哥帅 * weixin:YangCongTou8023 */ public class WatcheTest { public static void main(String[] args) { //被观察者 Watched boyWatched=new BoyWatched(); //观察者 GrilWatcher grilWatcher=new GrilWatcher(); //观察者 BoyWatcher boyWatcher=new BoyWatcher(); //添加观察者到被观察者的集合中 boyWatched.add(boyWatcher); boyWatched.add(grilWatcher); //被观察者通知观察者 boyWatched.notifyWatchers(" 我从泰国回来啦!"); } }
打印结果:测试
BoyWatched:我是男的!code
我从泰国回来啦!接口
BoyWatcher:我还爱你。。rem
GrilWatcher:我也要去!class
---------------下面是具体代码test
定义一个被观察者接口,一个观察者接口
import
package yct.com.watcher; /** * 观察者接口 * @author 哥帅 * weixin:YangCongTou8023 */ public interface Watched { //可添加观察者 public void add(Watcher watcher); //可删除观察者 public void delete(Watcher watcher); //通知观察者 public void notifyWatchers(String msg); }
package yct.com.watcher; /** * 观察者接口 * @author 哥帅 */ public interface Watcher { //要执行的动做 public void update(); }
定义一个具体的被观察者类,两个具体的观察者类date
package yct.com.watcher.impl; import java.util.ArrayList; import java.util.List; import yct.com.watcher.Watched; import yct.com.watcher.Watcher; public class BoyWatched implements Watched{ //观察者集合 List<Watcher> watchers=new ArrayList<Watcher>(); //构造器 public BoyWatched(){ System.out.println("BoyWatched:我是男的!"); } //添加观察者 public void add(Watcher watcher) { watchers.add(watcher); } //删除观察者 public void delete(Watcher watcher) { watchers.remove(watcher); } //通知观察者 public void notifyWatchers(String msg) { System.out.println(msg); for(Watcher watcher:watchers){ watcher.update(); } } }
package yct.com.watcher.impl; import yct.com.watcher.Watcher; /** * 定义一个具体的观察者(boyWatcher) * @author 哥帅 * weixin:YangCongTou8023 */ public class BoyWatcher implements Watcher{ public void update() { System.out.println("BoyWatcher:我还爱你。。"); } }
package yct.com.watcher.impl; import yct.com.watcher.Watcher; /** * 定义一个具体的观察者(grilWatcher) * @author 哥帅 * weixin:YangCongTou8023 */ public class GrilWatcher implements Watcher{ public void update() { System.out.println("GrilWatcher:我也要去!"); } }
这就是最简单的观察者模式,观察者模式有分推模型和拉模型,以上代码属于推模型。只须要被观察者的通知方法将本身做为参数便可,这要观察者能够经过此参数主动获取数据,即“拉”。
List
有写错的地方望指教!