利用观察者模式来获取线程中的数据或者回调函数
2015-08-18 22:30
429 查看
首先
抛出结果
//抽象主题角色,watched:被观察 public interface Watched { public void addWatcher(Watcher watcher); public void removeWatcher(Watcher watcher); public void notifyWatchers(Watcher watcher,String str); }
//抽象观察者角色 public interface Watcher { public void update(String str); }
import java.util.ArrayList; import java.util.Iterator; import java.util.List; /**观察者管理 * @author huangziwang * */ public class ConcreteWatched implements Watched { // 存放观察者 private static List<Watcher> list = new ArrayList<Watcher>(); public void addWatcher(Watcher watcher) { list.add(watcher); } public void removeWatcher(Watcher watcher) { list.remove(watcher); } public void notifyWatchers(Watcher watcher1,String str) { // 自动调用实际上是主题进行调用的 Iterator<Watcher> e = list.iterator(); while (e.hasNext()) { Watcher watcher = e.next();
//精确找出观察者返回函数并从队列中删除 if (watcher.equals(watcher1)) { watcher.update(str); e.remove(); System.out.println(list.size()); } } } }
public class ConcreteWatcher implements Watcher { public void update(String str) { System.out.println(str); } }
public class TestThread extends Thread { private Watcher watcher; // 将被观察者对象传入线程,这里充分显示了面向对象开发的好处 public TestThread (Watcher watcher) { this.watcher = watcher; } public void run() { Watched concreteWatched = new ConcreteWatched(); concreteWatched.notifyWatchers(watcher, "我是:" + hashCode()); } }
public class Test { public static void main(String[] args) { Watched girl = new ConcreteWatched(); // 将观察者加入队列中 Watcher watcher1 = new ConcreteWatcher(); girl.addWatcher(watcher1); TestThread t = new TestThread(watcher1); t.start(); } }
抛出结果
我是:743319257 0
相关文章推荐
- Activity的生命周期和两种基本布局
- HDU 5402 强模拟
- 多线程加载网络图片
- POJ 2773 Happy 2006 (分解质因数+容斥+二分 或 欧几里德算法应用)
- Delphi的Owner与Parent可以不一致,而且Owner不是必须存在(一共7个问题) good
- laravel form
- Volley初探
- Samba服务器安装和配置
- 反射
- 【JZOJ】3188 找数
- HDU 1754 I Hate It(线段树:单点更新,求区间最大值)
- 今夜,我只听风
- VMware中,配置Centos上网
- 【一些事晚报】如何让别人认可你的设计
- uva 1658 Admiral 最小费最大流
- MongoDB学习二--MongoDB 数据结构和查询
- uva 1658 Admiral 最小费最大流
- error : identifier “atomicAdd” is undefined
- [BBS]搭建开源论坛之JForum安装使用札记
- 散列-分离链接法(数据结构与算法分析-C语言描述)