昨天看了beckrabbit写的圣斗士星矢的状态模式和观察者模式文章之后对观察者模式又了新的认识,以前一直都是从书中学习设计模式的。看了这篇文章后感觉很形象。于是就写了一个小程序,可能很多人都听这个。程序的原理就是猫叫--老鼠跑--人醒。这里我写的是一个连续发生的。而不是猫叫的同时老鼠和人同时发生动作。因为我是刚才设计模式所以代码写的不好请大家多多指教。
我的想法是一个观察一个。也就是老鼠观察猫的,人观察老鼠的。所以首先猫是被观察者,而老鼠即是观察者也是被观察者。人就是老鼠的观察者。
代码如下:
首先我建立了三个类,分别是猫的,老鼠的和人的。
猫的类
老鼠的类
人的类
下面是主方法的测试类
运行结果
我的想法是一个观察一个。也就是老鼠观察猫的,人观察老鼠的。所以首先猫是被观察者,而老鼠即是观察者也是被观察者。人就是老鼠的观察者。
代码如下:
首先我建立了三个类,分别是猫的,老鼠的和人的。
猫的类
package com.lhsm.observer;
import java.util.Observable;
public class Cat extends Observable {
public void catCall(){
this.setChanged();
this.notifyObservers("猫叫了");
}
}
老鼠的类
package com.lhsm.observer;
import java.util.Observable;
import java.util.Observer;
public class Mouse extends Observable implements Observer {
public void update(Observable arg0, Object arg1) {
// TODO Auto-generated method stub
System.out.println(arg1);
Observer person = new Person();
this.clearChanged();
this.addObserver(person);
this.setChanged();
this.notifyObservers("老鼠跑");
}
}
人的类
package com.lhsm.observer;
import java.util.Observable;
import java.util.Observer;
public class Person implements Observer {
public void update(Observable arg0, Object arg1) {
// TODO Auto-generated method stub
System.out.println(arg1);
System.out.println("人醒");
}
}
下面是主方法的测试类
package com.lhsm.observer;
import java.util.Observer;
public class TestMain {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Cat cat = new Cat();
Observer mouse = new Mouse();
cat.addObserver(mouse);
cat.catCall();
}
}
运行结果
猫叫了
老鼠跑
人醒