您好,欢迎访问一九零五行业门户网

Java实现观察者(Observer)模式实例详情(图)

1. java自带的实现
类图
/** * 观察目标 继承自 java.util.observable * @author stone * */ public class updateobservable extends observable { private int data; public updateobservable(observer observer) { addobserver(observer); /* * add other observer */ } public int getdata() { return data; } public void setdata(int data) { if (data != this.data) { this.data = data; setchanged(); //标记 改变, 只有标记后才能通知到 notifyobservers(); //通知 } } @override public synchronized void addobserver(observer o) { super.addobserver(o); } @override public synchronized void deleteobserver(observer o) { super.deleteobserver(o); } @override public void notifyobservers() { super.notifyobservers(); } @override public void notifyobservers(object arg) { super.notifyobservers(arg); } @override public synchronized void deleteobservers() { super.deleteobservers(); } @override protected synchronized void setchanged() { super.setchanged(); } @override protected synchronized void clearchanged() { super.clearchanged(); } @override public synchronized boolean haschanged() { return super.haschanged(); } @override public synchronized int countobservers() { return super.countobservers(); } }
/** * 观察者 实现 java.util.observer接口 * @author stone * */ public class updateobserver implements observer { @override public void update(observable o, object arg) { system.out.println("接收到数据变化的通知:"); if (o instanceof updateobservable) { updateobservable uo = (updateobservable) o; system.out.print("数据变更为:" + uo.getdata()); } } }
2. 自定义的观察模型
类图
/** * 抽象观察者 observer * 观察 更新 * @author stone * */ public interface iwatcher { /* * 通知接口: * 1. 简单通知 * 2. 观察者需要目标的变化的数据,那么可以将目标用作参数, 见java的observer和observable */ // void update(iwatched watched); void update(); }
/** * 抽象目标 subject * 提供注册和删除观察者对象的接口, 及通知观察者进行观察的接口 * 及目标 自身被观察的业务的接口 * @author stone * */ public interface iwatchedsubject { public void add(iwatcher watch); public void remove(iwatcher watch); public void notifywhatchers(); public void update();//被观察业务变化的接口 }
/** * 具体观察者 concrete observer * * @author stone * */ public class updatewatcher implements iwatcher { @override public void update() { system.out.println(this + "观察到:目标已经更新了"); } }
/** * 具体目标角色 concrete subject * @author stone * */ public class updatewatchedsubject implements iwatchedsubject { private list<iwatcher> list; public updatewatchedsubject() { this.list = new arraylist<iwatcher>(); } @override public void add(iwatcher watch) { this.list.add(watch); } @override public void remove(iwatcher watch) { this.list.remove(watch); } @override public void notifywhatchers() { for (iwatcher watcher : list) { watcher.update(); } } @override public void update() { system.out.println("目标更新中...."); notifywhatchers(); } }
监听器是观察者的一种实现
类图
/** * 监听 用户在注册后 * @author stone * */ public interface iregisterlistener { void onregistered(); }
/** * 监听 当用户登录后 * @author stone * */ public interface iloginlistener { void onlogined(); }
/* * 监听器 是观察者模式的一种实现 * 一些需要监听的业务接口上添加 监听器,调用监听器的相应方法,实现监听 */ public class user { public void register(iregisterlistener register) { /* * do ... register */ system.out.println("正在注册中..."); //注册后 register.onregistered(); } public void login(iloginlistener login) { /* * do ... login */ system.out.println("正在登录中..."); //登录后 login.onlogined(); } }
/** * 观察者(observer)模式 行为型模式 * 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时观察某一个目标对象。 * 这个目标对象在状态上发生变化时,会通知所有观察者对象,让它们能够自动更新自己 * 目标对象中需要有添加、移除、通知 观察者的接口 * * @author stone */ public class test { public static void main(string[] args) { /* * 使用java自带的observer接口和observable类 */ updateobservable observable = new updateobservable(new updateobserver()); observable.setdata(99); system.out.println(""); system.out.println(""); /* * 自定义的观察者模型 */ iwatchedsubject watched = new updatewatchedsubject(); watched.add(new updatewatcher()); watched.add(new updatewatcher()); watched.update(); system.out.println(""); /* * 子模式-监听器 */ user user = new user(); user.register(new iregisterlistener() { @override public void onregistered() { system.out.println("监听到注册后。。。"); } }); user.login(new iloginlistener() { @override public void onlogined() { system.out.println("监听到登录后。。。"); } }); } }
打印
接收到数据变化的通知: 数据变更为:99 目标更新中.... observer.updatewatcher@457471e0观察到:目标已经更新了 observer.updatewatcher@5fe04cbf观察到:目标已经更新了 正在注册中... 监听到注册后。。。 正在登录中... 监听到登录后。。。
以上就是java实现观察者(observer)模式实例详情(图)的详细内容。
其它类似信息

推荐信息