Chinaunix首页 | 论坛 | 博客
  • 博客访问: 13406
  • 博文数量: 9
  • 博客积分: 320
  • 博客等级: 一等列兵
  • 技术积分: 100
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-25 17:33
文章分类

全部博文(9)

文章存档

2011年(1)

2010年(1)

2009年(7)

我的朋友
最近访客

分类: Java

2009-04-25 20:34:11

  今天看了关于Observer模式的有关内容,这里有一个比喻,假设热水器由三部分组成:热水管、警报器、显示器,它们来自于不同厂商并进行了组装。那么应该是热水器仅仅负责烧水,

它不能发出警报也不能显示水温;在水烧开时由警报器发出警报、显示器显示提示和水温,根据这个思想,再结合Observer中的具体概念(如下),自己动手写了一段比较简单的代码。

Observer设计模式中主要包括如下两类对象:
(1)Subject: 监视对象,它往往包含着其它对象所感兴趣的内容。在本范例中,热水器就是一个监视对象,它包含的其它对象所感兴趣的内容,就是temprature 字段,
当这个字段的值快到100时,会不断把数据发给监视它的对象。
(2)Observer: 监视者,它监视Subject,当Subject中的某件事发生的时候,会告知Observer,而Observer则会采取相应的行动。
在本范例中,Observer有警报器和显示器,它们采取的行动分别是发出警报和显示水温。在本例中,事情发生的顺序应该是这样的:
警报器和显示器告诉热水器,它对它的温度比较感兴趣(注册)。热水器知道后保留对警报器和显示器的引用。
(3)热水器进行烧水这一动作,当水温超过95度时,通过对警报器和显示器的引用,自动调用警报器的
MakeAlert()方法、显示器的ShowMsg()方法。  
在这个例子中,有四个类Heater、Alter、Displayer和Main,前三个类分别是热水管、报警器和显示屏,
最后一个Main类用来测试程序
 
Heater类代码如下: 
import java.util.Observable;
public class Heater extends Observable
{
 private int temprature;
 
 public void tempratureChanged()
 {
  for(temprature=0;temprature<=100;temprature++)
  {   
    setChanged();
    notifyObservers(temprature);
    System.out.println();
    
    try
   {
    Thread.sleep(200);
   }
   catch(Exception e)
   {
   }
   }
  }
}
Alter类代码:
import java.util.Observable;
import java.util.Observer;
public class Alter implements Observer
{
 private int temprature; 
 public void update(Observable obj,Object arg)
 {
  temprature=(Integer)arg;
  if(temprature>=95)
  {
    System.out.println("Alter...");
   } 
 }
}
Displayer类代码:
import java.util.Observable;
import java.util.Observer;
public class Displayer implements Observer
{
 private int temprature; 
 public void update(Observable obj,Object arg)
 {
  temprature=(Integer)arg;
  System.out.println("The temprature of the water is:"+temprature);
 }
}
Main类代码:
public class Main
{
 public static void main(String[] args)
 {
  Heater heater=new Heater();
  Alter alter=new Alter();
  Displayer displayer=new Displayer();
  
  heater.addObserver(alter);
  heater.addObserver(displayer);
  
  heater.tempratureChanged();
 }
}
测试最后输出的结果为: 
The temprature of the water is:0 
The temprature of the water is:1 
The temprature of the water is:2 
The temprature of the water is:3 
(一直到94)........ 
The temprature of the water is:95 Alter... 
The temprature of the water is:96 Alter... 
The temprature of the water is:97 Alter... 
The temprature of the water is:98 Alter...
 The temprature of the water is:99 Alter... 
The temprature of the water is:100 Alter... 
 
阅读(483) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:mysql中常用命令

给主人留下些什么吧!~~