设计模式之观察者模式
来源:互联网 发布:js数字滚动抽奖 编辑:程序博客网 时间:2024/05/17 16:45
观察者模式,又称发布-订阅模式,是软件开发常用设计模式的一种。观察者模式,定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。
让我们来分析一下代码:
Subject.java 观察者注册删除的接口
package com.obaniu;/** * @author Obaniu * @since 2011-10-31 * @version 1.0 * */public interface Subject {// 注册观察者public void registerObserver(Observer o);// 删除观察者public void removeObserver(Observer o);// 通知观察者public void notifyObservers();}Observer.java 观察者接口
package com.obaniu;/** * @author Obaniu * @since 2011-10-31 * @version 1.0 * */public interface Observer { //用来更新信息public void update(String msg);}DisplayElement.java 信息显示接口
package com.obaniu;public interface DisplayElement { //用来显示接受到的信息public void display(); }DisplayElement.java 信息显示接口
package com.obaniu;public interface DisplayElement { //用来显示接受到的信息public void display(); }MyMessage.java 实现 Subject
package com.obaniu;import java.util.ArrayList;/** * 实现Subject接口 * @author Obaniu * @since 2011-10-31 * @version 1.0 */public class MyMessage implements Subject {private ArrayList list;private String msg; public MyMessage(){list = new ArrayList();}@Overridepublic void registerObserver(Observer o) {// TODO Auto-generated method stublist.add(o);}@Overridepublic void removeObserver(Observer o) {// TODO Auto-generated method stubint i = list.indexOf(o);if (i >= 0) {list.remove(i);}}@Overridepublic void notifyObservers() {// TODO Auto-generated method stubfor (int i = 0; i < list.size(); i++) { Observer observer = (Observer) list.get(i); observer.update(msg);}} public void setMessage(String message){this.msg = message;messageChanged();}private void messageChanged() {// TODO Auto-generated method stubnotifyObservers();}}CurrentConditionDisplay.java
/** * */package com.obaniu;/** * @author Obaniu * @since 2011-10-31 * */public class CurrentConditionsDisplay implements Observer, DisplayElement { private Subject subject;private String msg;public CurrentConditionsDisplay(Subject subject){this.subject = subject;subject.registerObserver(this);}/* (non-Javadoc) * @see com.obaniu.DisplayElement#display() */@Overridepublic void display() {// TODO Auto-generated method stub System.out.println("接受到的消息:"+msg);}/* (non-Javadoc) * @see com.obaniu.Observer#update(java.lang.String) */@Overridepublic void update(String msg) {// TODO Auto-generated method stub this.msg = msg; display();}}编写测试类Test.java
package com.obaniu;public class Test {public static void main(String[] args) { MyMessage myMessage = new MyMessage();CurrentConditionsDisplay currentDisplay = new CurrentConditionsDisplay(myMessage);for (int i = 0; i < 10; i++) {myMessage.setMessage(">>>>>>>>>>>>>>>>>" + i);}}}在控制台上打印信息:
接受到的消息:>>>>>>>>>>>>>>>>>0接受到的消息:>>>>>>>>>>>>>>>>>1接受到的消息:>>>>>>>>>>>>>>>>>2接受到的消息:>>>>>>>>>>>>>>>>>3接受到的消息:>>>>>>>>>>>>>>>>>4接受到的消息:>>>>>>>>>>>>>>>>>5接受到的消息:>>>>>>>>>>>>>>>>>6接受到的消息:>>>>>>>>>>>>>>>>>7接受到的消息:>>>>>>>>>>>>>>>>>8接受到的消息:>>>>>>>>>>>>>>>>>9
- 设计模式之-观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之观察者模式
- 求一段smartupload上传图片的代码,不需要保存到数据库,但是想在jsp页面选中文件夹图片后,立马可以显示
- 不存钱的老年生活
- Flex中键入Html代码
- 求最长重复子串 和 最长不重复子串 思路
- CACULATOR
- 设计模式之观察者模式
- 一道内存对齐问题和由此引出的CPU字节序问题
- ORA-600 [2662] Block SCN is ahead of Current SCN [ID 28929.1]
- oracle inactive死连接
- 如何更有效地阅读
- 一个Flex做的Mp3播放器
- JSP隐式对象之Application
- Oracle session连接数和inactive的问题记录
- samba-mount