分类: Java
2009-04-25 20:34:11
今天看了关于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...