一.基本概念
   java.util.Observable 被观察者类,需要继承这个类
   java.util.Observer 观察者类,需要实现这个接口中的update()方法

二.举例 Door2
   属性 name 和status 改变,被监管
1.Door2

import java.util.Observable;

//被监管对象
public class Door2 extends Observable {
private String state = "";
private String name = ""; public void setState(String newValue) {
if (state != newValue) {
this.state = newValue;
// 标记此 Observable对象为已改变的对象
setChanged();
// 通知所有观察者
notifyObservers("state");
}
} public void setName(String newValue) {
if (name != newValue) {
this.name = newValue;
// 标记此 Observable对象为已改变的对象
setChanged();
// 通知所有观察者
notifyObservers("name");
}
}
//////////////////////////////////////////
public String getName() {
return name;
} public String getState() {
return state;
}
}

2.被监管对象
   Door2StateObserver

import java.util.Observable;
import java.util.Observer; public class Door2StateObserver implements Observer { @Override
public void update(Observable o, Object arg) {
Door2 door2 = (Door2) o;
if (!arg.toString().equalsIgnoreCase("state")) {
return;
}
switch (door2.getState()) { // 使用Java 7的switch语句对string的判断支持
case "open":
System.out.println("门打开");
break;
case "close":
System.out.println("门关闭");
break;
}
}
}

Door2NameObserver

import java.util.Observable;
import java.util.Observer; public class Door2NameObserver implements Observer { @Override
public void update(Observable o, Object arg) {
Door2 door2 = (Door2) o;
if (!arg.toString().equalsIgnoreCase("name")) {
return;
}
System.out.println("I got a new name,named \"" + door2.getName() + "\"");
}
}

3.Door2Test

public class Door2Test {
public static void main(String[] args) { Door2 door = new Door2();
Observer stateListener = new Door2StateObserver();
door.addObserver(stateListener);
// 开门
door.setState("open");
System.out.println("我已经进来了");
// 关门
door.setState("close"); //
Observer nameListener = new Door2NameObserver();
door.addObserver(nameListener);
door.setName("dengzy");
}
}

设计模式_Observable与Observer的更多相关文章

  1. 乐在其中设计模式(C#) - 观察者模式(Observer Pattern)

    原文:乐在其中设计模式(C#) - 观察者模式(Observer Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 观察者模式(Observer Pattern) 作者:weba ...

  2. 8.5 GOF设计模式四: 观察者模式Observer

    GOF设计模式四: 观察者模式Observer  现实中遇到的问题  当有许多不同的客户都对同一数据源感兴趣,对相同的数据有不同的处理方式,该如 何解决?5.1 定义: 观察者模式  观察者模式 ...

  3. java设计模式解析(1) Observer观察者模式

      设计模式系列文章 java设计模式解析(1) Observer观察者模式 java设计模式解析(2) Proxy代理模式 java设计模式解析(3) Factory工厂模式 java设计模式解析( ...

  4. 深入浅出设计模式——观察者模式(Observer Pattern)

    模式动机 建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应做出反应.在此,发生改变的对象称为观察目标,而被通知的对象称为观察者,一个观察目标可以对应多个观察者,而 ...

  5. c++ 设计模式5 (Observer / Event 观察者模式)

    3.3 观察者模式 (Observer)/发布-订阅模式 动机: 在软件构建过程中,我们需要为某些对象建立一种“通知依赖关系”——一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都能得 ...

  6. [设计模式] 19 观察者模式 Observer Pattern

    在GOF的<设计模式:可复用面向对象软件的基础>一书中对观察者模式是这样说的:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新.当一个 ...

  7. Java设计模式模式观测(Observer Pattern)

    Observer Pattern 设计模式通常用于.这是一个事件侦听器模型. 该模型有两个作用,一个是Subject, 有一个Observer.Subject 保存多个Observer参考,一旦一个特 ...

  8. 设计模式之观察者(OBSERVER)模式

    定义 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新.  Observer模式描述了如何建立这种关系.这一模式中的关键对象是目标(subject ...

  9. c#设计模式之观察者模式(Observer Pattern)

    场景出发 一个月高风黑的晚上,突然传来了尖锐的猫叫,宁静被彻底打破,狗开始吠了,大人醒了,婴儿哭了,小偷跑了 这个过程,如果用面向对象语言来描述,简单莫过于下: public class Cat { ...

随机推荐

  1. Java 的BigDecimal

    原文:http://blog.csdn.net/diyu122222/article/details/76887382 decimal decimal(18,0) 18是定点精度,0是小数位数. de ...

  2. http请求及缓存框架 GalHttprequest

    GalHttprequest 是一个android平台上一个轻量级的http网络请求及缓存框架.当前GalHttpRequest支持以下功能: 同步请求Stirng.InputStream.Bitma ...

  3. 【Todo】Boost安装与学习

    现在这里找下载包 http://sourceforge.net/projects/boost 我找的是 1_62_0 下面是从公司wiki上找到的一个说明. boost & thrift安装步 ...

  4. Java实现Redis pipeline比较

    开始实验这个,是因为Redis实战.pdf上面有例子. 上面用的是 org.jredis包,可是发现这个包不在maven的公共仓库里.需要先下载然后放在本地,导入maven依赖.详见: http:// ...

  5. PL/SQL如何远程连接ORACLE

    如何在没有装ORACLE的电脑上用PLSQL远程连接ORACLE 下载instantclient,我的是WIN7,下载的是instantclient-basiclite-nt-12.1.0.1.0.z ...

  6. Navicat查看MySQL日志

    Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE /* Style Definitions */ table.MsoNormalTable ...

  7. 关于Django迁移出现问题

    关于Django迁移出现问题 源码: #coding:utf- from django.db import models # Create your models here. class BookIn ...

  8. ci框架(二)

    自定义SQL语句                                                                             当提供的API满足不了我们对S ...

  9. RocketMQ 拉取消息-通信模块

    首先看server端:class NettyRemotingServer extends NettyRemotingAbstract implements RemotingServer 下面这个实现了 ...

  10. My SqL 语法大全

    一.SQL速成  结构查询语言(SQL)是用于查询关系数据库的标准语言,它包括若干关键字和一致的语法,便于数据库元件(如表.索引.字段等)的建立和操纵.  以下是一些重要的SQL快速参考,有关SQL的 ...