学习观察者模式的一个例子

昨天看了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();
}

}

运行结果

猫叫了
老鼠跑
人醒
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值