应用Observer接口实践Observer模式
原文:http://zhangjunhd.blog.51cto.com/113473/68949/
在Java中通过Observable类和Observer接口实现了观察者模式。Observer对象是观察者,Observable对象是被观察者。
- void addObserver(Observer o)
- setChanged();
- notifyObservers();
- void update(Observable o, Object arg)
- package com.zj.observer;
- import java.util.Observable;
- public class NumObservable extends Observable {
- private int data = ;
- public int getData() {
- return data;
- }
- public void setData(int i) {
- data = i;
- setChanged();
- notifyObservers();
- }
- }
- package com.zj.observer;
- import java.util.Observable;
- import java.util.Observer;
- public class NumObserver implements Observer{
- public void update(Observable o, Object arg) {
- NumObservable myObserable=(NumObservable) o;
- System.out.println("Data has changed to " +myObserable.getData());
- }
- }
- package com.zj.observer;
- public class SingleTest {
- public static void main(String[] args) {
- NumObservable number = new NumObservable();
- number.addObserver(new NumObserver());
- number.setData();
- number.setData();
- number.setData();
- }
- }
- package com.zj.observers;
- import java.util.Observable;
- public class NumsObservable extends Observable {
- public final static Integer ODD = ;
- public final static Integer EVEN = ;
- private int data = ;
- public int getData() {
- return data;
- }
- public void setData(int i) {
- data = i;
- Integer flag = EVEN;
- if ((data & 0x0001) == )
- flag = ODD;
- setChanged();
- notifyObservers(flag);
- }
- }
奇数观察者OddObserver.java
- package com.zj.observers;
- import java.util.Observable;
- import java.util.Observer;
- public class OddObserver implements Observer {
- public void update(Observable o, Object arg) {
- if (arg == NumsObservable.ODD) {
- NumsObservable myObserable = (NumsObservable) o;
- System.out.println("OddObserver:Data has changed to " + myObserable.getData());
- }
- }
- }
偶数观察者EvenObserver.java
- package com.zj.observers;
- import java.util.Observable;
- import java.util.Observer;
- public class EvenObserver implements Observer {
- public void update(Observable o, Object arg) {
- if (arg == NumsObservable.EVEN) {
- NumsObservable myObserable = (NumsObservable) o;
- System.out.println("EvenObserver:Data has changed to " + myObserable.getData());
- }
- }
- }
测试类MultiTest.java
- package com.zj.observers;
- public class MultiTest {
- public static void main(String[] args) {
- NumsObservable number = new NumsObservable();
- number.addObserver(new OddObserver());
- number.addObserver(new EvenObserver());
- number.setData();
- number.setData();
- number.setData();
- }
- }
- OddObserver:Data has changed to
- EvenObserver:Data has changed to
- OddObserver:Data has changed to
应用Observer接口实践Observer模式的更多相关文章
- Java:应用Observer接口实践Observer模式
本文出自“子 孑” 博客,原文链接:http://zhangjunhd.blog.51cto.com/113473/68949 在Java中通过Observable类和Observer接口实现了观察者 ...
- Java中使用Observer接口和Observable类实践Observer观察者模式
在Java中通过Observable类和Observer接口实现了观察者模式.实现Observer接口的对象是观察者,继承Observable的对象是被观察者. 1. 实现观察者模式 实现观察者模式非 ...
- Java常用类库--观察者设计模式( Observable类Observer接口)
如果要想实现观察者模式,则必须依靠java.util包中提供的Observable类和Observer接口. import java.util.* ; class House extends Obse ...
- 利用Java提供的Observer接口和Observable类实现观察者模式
对于观察者模式,其实Java已经为我们提供了已有的接口和类.对于订阅者(Subscribe,观察者)Java为我们提供了一个接口,JDK源码如下: package java.util; public ...
- Java Observer接口和Observable类实现观察者模式
对于观察者模式,其实Java已经为我们提供了已有的接口和类.对于订阅者(Subscribe,观察者)Java为我们提供了一个接口,JDK源码如下: package java.util; public ...
- 观察者设计模式( Observable类Observer接口)
如果要想实现观察者模式,则必须依靠Java.util包中提供的Observable类和Observer接口. class House extends Observable{ // 表示房子可以被观察 ...
- Observer(观察者)模式
1.概述 一些面向对象的编程方式,提供了一种构建对象间复杂网络互连的能力.当对象们连接在一起时,它们就可以相互提供服务和信息. 通常来说,当某个对象的状态发生改变时,你仍然需要对象之间能互相通信.但是 ...
- 责任型模式一:Observer(观察者)模式
目的: Observer模式的宗旨是在多个对象之间定义一对多的关系,以便当一个对象状态改变时,其他所有依赖于这个对象的对象都能得到通知,并被自动更新.常用于业务逻辑层与表现层的分离. 需求:由GUI引 ...
- JavaScript设计模式与开发实践 - 策略模式
引言 本文摘自<JavaScript设计模式与开发实践> 在现实中,很多时候也有多种途径到达同一个目的地.比如我们要去某个地方旅游,可以根据具体的实际情况来选择出行的线路. 如果没有时间但 ...
随机推荐
- 性能计数器自动收集-logman
1.在桌面云测试中,往往需要模拟并发连接中服务器的性能数据,这里主要介绍如何自动收集性能数据 2.创建xxxx.bat文件,文件内容如下: logman create counter test -cf ...
- Android 中使用 html 作布局文件
在Android开发中,通常使用xml格式来描述布局文件.就目前而言,熟悉android布局及美化的人员少之又少,出现了严重的断层.大部分企业,其实还是程序员自己动手布局.这样既浪费时间和精力,也未必 ...
- 用SHELL与列表处理了件尴尬事
与列表语法 command-1 && command-2 && command-3 && command-4 && ...command ...
- [置顶] Android系统访问控制之Smack安全策略设计与实现
1. 制定smack规则 “Zygote”进程由init进程创建,它负责创建系统服务进程“systemserver”.“radio”进程和APP进程.其中“radio”进程的uid是1001,它能够实 ...
- Android Studio 初体验
Google在I/O */
- 用C/C++扩展你的PHP(转)
简 介 英文版下载: PHP 5 Power Programming PHP取得成功的一个主要原因之一是她拥有大量的可用扩展.web开发者无论有何种需求,这种需求最有可能在PHP发行包里找到.PHP发 ...
- jquery之营销系统(补偿记录)
var appPath = getAppPath(); $(function(){ $("#opreateHtml").window("close"); $(& ...
- Python - SQLAlchemy之连表操作
ORM的两种创建方式 数据库优先:指的是先创建数据库,包括表和字段的建立,然后根据数据库生成ORM的代码,它是先创建数据库,再创建相关程序代码 代码优先:就是先写代码,然后根据代码去生成数据库结构. ...
- Set Windows IP by Batch
netsh interface ip set address name="Local" static 192.168.1.55 255.255.255.0 192.168.1.1 ...
- ios9基础知识总结(foundation)笔记
类:NSObject .NSString.NSMutableString.NSNumber.NSValue.NSDate.NSDateFormatter.NSRange.Collections:NSS ...