首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

java设计形式之观察者模式(3)

2013-03-21 
java设计模式之观察者模式(3)?java设计模式之观察者模式(1)和 java设计模式之观察者模式(2)都简单的介绍了

java设计模式之观察者模式(3)

?java设计模式之观察者模式(1)和 java设计模式之观察者模式(2)

都简单的介绍了观察者模式。

但是有局限,观察者是固定的,观者的行为也是固定的,解决观察者固定这个问题我们可以用容器,解决固定行为的问题,我们可以用aop解决,这里不多说了

现在讲下java 种已经提供了java.util.Observable类(被观察者)和java.util.Observer接口(观察者)。

比如三国时期,刘备和孙权联合抗击曹操。

假设曹操带领大军来攻击孙权,

孙权和刘备都要观察曹操的动静,因为他们是盟军嘛。

曹操:

package spring3.event;import java.util.Observable;public class CaoCao extends Observable {public void attact() {System.out.println("曹操:开始进攻!!!");super.setChanged();super.notifyObservers();}}

?刘备:

package spring3.event;import java.util.Observable;import java.util.Observer;public class LiuBei implements Observer {@Overridepublic void update(Observable o, Object arg) {System.out.println("刘备:监视到了曹操开始进攻.");System.out.println("刘备:我们两翼包抄.");}}

?孙权:

package spring3.event;import java.util.Observable;import java.util.Observer;public class SunQuan implements Observer {@Overridepublic void update(Observable o, Object arg) {System.out.println("孙权:监视到了曹操开始进攻.");System.out.println("孙权:我们正面迎敌.");}}

?测试

package spring3.event;public class Test {public static void main(String[] args) {LiuBei liu = new LiuBei();SunQuan sun = new SunQuan();CaoCao cao = new CaoCao();// 当然这是秘密安插间谍,谁也不能白痴到自己招间谍cao.addObserver(liu);cao.addObserver(sun);cao.attact();}}

?测试结果:

曹操:开始进攻!!!孙权:监视到了曹操开始进攻.孙权:我们正面迎敌.刘备:监视到了曹操开始进攻.刘备:我们两翼包抄.

?这个代码都很简单,我就不说什么了,可以自己意会。

热点排行