- 浏览: 193878 次
- 性别:
- 来自: QD
文章分类
- 全部博客 (127)
- Struts2 (8)
- Web (27)
- 计算机基础 (2)
- 面试 (2)
- JQuery (4)
- MySQL (1)
- SQL (1)
- AJAX (3)
- Java (17)
- Javascript (36)
- 情感 (0)
- Oracle (7)
- Spring (5)
- FreeMarker (2)
- JSON (1)
- 表达式 (1)
- 线程 (4)
- WebService (10)
- MyEclipse (2)
- LDAP (1)
- Tomcat (1)
- NIO (1)
- Linux (1)
- ExtJS (4)
- Android (1)
- Dojo (2)
- Maven (9)
- Ant (7)
- 分布式 (1)
- Intellij IDEA (1)
最新评论
-
northc:
米饭军 写道如果文件已存在怎样避免应该会覆盖的
用Ant scp往远程linux传文件 -
米饭军:
如果文件已存在怎样避免
用Ant scp往远程linux传文件 -
luis025:
不支持列隐藏 硬伤
ExtJS4.0 分享Grid导出Excel插件(3.28更新支持4.1) -
rgbhje:
楼主大神,我把你的代码简单改了一小下,在4.2可以跑了
ExtJS4.0 分享Grid导出Excel插件(3.28更新支持4.1) -
rgbhje:
楼主大神,我把你的代码简单改了一小下,在4.2可以跑了
ExtJS4.0 分享Grid导出Excel插件(3.28更新支持4.1)
转自:http://zhangjunhd.blog.51cto.com/113473/68949
在Java中通过Observable类和Observer接口实现了观察者模式。Observer对象是观察者,Observable对象是被观察者。
1. 实现观察者模式
实现观察者模式非常简单,
[1]创建被观察者类,它继承自java.util.Observable类;
[2]创建观察者类,它实现java.util.Observer接口;
[3]对于被观察者类,
添加它的观察者:
void addObserver(Observer o)
|
addObserver()方法把观察者对象添加到观察者对象列表中。
当被观察事件发生时,执行:
setChanged();
notifyObservers();
|
setChange()方法用来设置一个内部标志位注明数据发生了变化;notifyObservers()方法会去调用观察者对象列表中所有的Observer的update()方法,通知它们数据发生了变化。
只有在setChange()被调用后,notifyObservers()才会去调用update()。
[4]对于观察者类,实现Observer接口的唯一方法update
void update(Observable o, Object arg)
|
形参Object arg,对应一个由notifyObservers(Object arg);传递来的参数,当执行的是notifyObservers();时,arg为null。
2.实例一
NumObserable是一个被观察者,当它的成员变量data的数值发生变化时,会通知所有的观察者。
NumObserable.java
package com.zj.observer;
import java.util.Observable;
public class NumObservable extends Observable {
private int data = 0;
public int getData() {
return data;
}
public void setData(int i) {
data = i;
setChanged();
notifyObservers();
}
}
|
NumObserver是观察者。当它的被观察者(NumObserable)执行了notifyObservers()后,它会执行uodate()方法。
NumObserver.java
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());
}
}
|
测试类SingleTest,在这里将观察者加入到被观察者的观察列表中。
SingleTest.java
package com.zj.observer;
public class SingleTest {
public static void main(String[] args) {
NumObservable number = new NumObservable();
number.addObserver(new NumObserver());
number.setData(1);
number.setData(2);
number.setData(3);
}
}
|
结果:
Data has changed to 1
Data has changed to 2
Data has changed to 3
3.实例二
这个实例中,还是对data进行观察,拥有两个观察者,分别观察奇数和偶数的变化,通过notifyObservers(arg)中的参数arg来识别通知信息。
被观察者NumsObservable.java
package com.zj.observers;
import java.util.Observable;
public class NumsObservable extends Observable {
public final static Integer ODD = 1;
public final static Integer EVEN = 2;
private int data = 0;
public int getData() {
return data;
}
public void setData(int i) {
data = i;
Integer flag = EVEN;
if ((data & 0x0001) == 1)
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(1);
number.setData(2);
number.setData(3);
}
}
|
结果:
OddObserver:Data has changed to 1
EvenObserver:Data has changed to 2
OddObserver:Data has changed to 3
发表评论
-
Java桌面程序打包成exe可执行文件(转)
2012-12-27 00:56 1215前言: 我们都知道Java可以将二进制程序打包成可执行 ... -
使用Java继承与泛型特性创建高效与安全的DAO对象
2012-06-27 17:15 0现在无论做什么应用,基本上都会有涉及对象持久化这方面的操 ... -
Java 批量插入数据(Oracle)
2012-03-28 16:21 2983//批量添加20000条数据用时8秒。 try { ... -
httpclient ,HtmlParser
2011-12-26 17:40 0有时间研究下吧... -
Java读取properties文件 【转】
2011-12-26 09:36 969不用可能会忘记.. 在这里转下别人的记录 方便以后 ... -
request 获取路径
2011-12-26 17:38 1128request.getRequestURI() /j ... -
ServletContext对象应用
2011-12-07 14:53 1325ServletContext对象是由谁创建的? 由Serv ... -
配置listener监听器(HttpSessionListener和HttpSessionBindingListener)细说
2011-12-07 14:52 1292from:http://blog.csdn.net/opnmz ... -
LDAP的特定错误集合
2011-11-28 11:29 2943LDAP的特定错误Error: com.macromedia. ... -
Filter多线程小细节
2011-11-26 14:50 1225在使用fileter的时候 如果在中间的位置需要fil ... -
JDBC调用Oracle的存储过程
2011-11-10 19:10 880本文主要是总结 如何实现 JDBC调用Oracle的存储过 ... -
ThreadLocal<T>总结补充
2011-11-06 17:47 1802原文地址: http://www.iteye.com/ ... -
关于 ThreadLocal
2011-11-06 17:26 1197ThreadLoca ... -
(转)Java编程中影响性能的一些特点
2011-11-04 11:42 650文中将提供一些在Java编程中影响性能的一些特点,为了能够 ... -
JSON与JAVA数据的转换
2011-10-21 12:24 922JSON-lib这个Java类包用于把bean,ma ... -
(转)Java内部类的用法
2011-10-21 09:05 766一、 定义 放在一个类的内部的类我们就叫内部类。 二、 作用 ... -
Java动态代理
2011-10-19 12:00 782代理模式 代理模式的 ... -
利用java的反射机制来访问类中的私有成员变量,私有构造方法,私有方法
2011-09-24 11:03 24211. 准备一个演示类 package my ...
相关推荐
Java 设计模式最佳实践是软件开发中的重要主题,它涵盖了多种模式,这些模式已被广泛接受并应用于实际项目中,以解决常见的编程问题和提升代码的可读性、可维护性和可扩展性。在这个主题中,我们将深入探讨一些关键...
《设计模式——Java语言中的应用》是一本专为Java开发者深入理解面向对象设计而编写的经典书籍。设计模式是软件工程领域中经过实践验证的、解决常见问题的有效方案,它们代表了在特定上下文中,针对特定问题的最优...
Java的`Observer`和`Observable`接口实现了观察者模式。 13. **责任链模式**:避免请求的发送者和接收者之间的耦合,将多个处理者组织成链,请求沿着链传递,直到被某个处理者处理。在Java中,异常处理机制某种程度...
标题中的"OBserver模式设计实现"是指探讨如何在实际编程中应用观察者模式,无论是用Java还是C++。Head First系列书籍是著名的编程学习资源,以易懂的方式解释复杂的设计模式。在描述中提到的"Head First模式设计用的...
在这个场景中,我们将讨论如何在Java中应用Observer模式,特别是在电子商务系统中的应用。 Observer模式的核心思想是定义一个一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,当主题对象的状态发生变化...
1. 创建型模式:这类模式主要处理对象的创建,使得代码与对象的创建过程解耦。包括单例模式(Singleton)、工厂模式(Factory)、抽象工厂模式(Abstract Factory)、建造者模式(Builder)和原型模式(Prototype)...
在Java中,`java.util.Observable`类和`java.util.Observer`接口就是对Observer模式的一种实现。`Observable`类代表主题,`Observer`接口代表观察者。当我们创建一个`Observable`对象并添加`Observer`对象到其观察者...
在Java中,Observer模式主要通过java.util.Observable和java.util.Observer接口来实现。Observable类代表被观察的对象,它可以添加观察者,删除观察者,并通知所有的观察者。Observer接口则定义了一个update方法,当...
Java EE 设计模式:Spring 企业级开发最佳实践 Java EE 设计模式是指在 Java 企业版(Java Enterprise Edition)中应用的设计模式,旨在提高软件系统的可维护性、可扩展性和可重用性。Spring 是当前最流行的 Java ...
5. 观察者模式:Java.util.Observable和java.util.Observer接口提供了观察者模式的支持,广泛应用于事件驱动编程,例如GUI组件间的通信。 6. 模板方法模式:在Java中的JDBC模板类,如JdbcTemplate,定义了数据库...
本资源“设计模式:Java语言中的应用”提供了一个深入理解和应用设计模式的平台,适合Java开发者和软件架构师学习。 1. **单例模式**:确保一个类只有一个实例,并提供全局访问点。在Java中,单例模式通常通过私有...
在Java中,设计模式的应用不仅限于上述介绍,还包括其他如命令模式(Command)、迭代器模式(Iterator)、备忘录模式(Memento)、模板方法模式(Template Method)等。这些模式在设计复杂系统时起着关键作用,比如...
《设计模式:java语言中的应用》这本书深入探讨了如何在Java中应用设计模式,这些模式是软件开发中的最佳实践,可以提高代码的可读性、可维护性和复用性。 1. **State模式**:State模式允许对象在其内部状态改变时...
《Java EE设计模式:Spring企业级开发最佳实践》是一本深度探讨如何在企业级Java应用程序中有效运用设计模式的著作。这本书聚焦于Spring框架,它作为Java EE领域中最为广泛使用的开源框架之一,极大地简化了企业级...
本资料“设计模式:Java语言中的应用.rar”详细探讨了如何在Java环境中有效地运用这些模式。 首先,我们要理解设计模式的基本分类。设计模式通常分为三大类:创建型模式、结构型模式和行为型模式。创建型模式如单例...
总之,"SimpleTodo:Codepath Observer 类的合格项目"是一个学习和实践Observer模式的绝佳案例,它涵盖了Android开发中的数据持久化、事件驱动编程和UI更新等重要概念,对于Java和Android开发者来说,这是一个不容...
Java.util.Observable和Observer接口就是观察者模式的实现。 10. 装饰模式:装饰模式动态地给一个对象添加一些额外的职责。它提供了比继承更多的灵活性,避免了因为功能增加而导致类的急剧膨胀。 以上只是部分设计...
在Java编程中,有23种经典的GoF(Gang of Four)设计模式,它们被分为三大类:创建型、结构型和行为型。本资源集合了这些模式的详细解释与源码分析,旨在帮助开发者深入理解和应用设计模式。 1. 创建型模式...
另外,接口还用于实现依赖注入(Dependency Injection),策略模式(Strategy Pattern),观察者模式(Observer Pattern)等设计模式,这些都是软件工程中常见的设计原则和模式。 ### 结论 总之,Java接口不仅提供了强大...