ITPub博客

首页 > IT职业 > IT生活 > 我工作的那点事--学习《设计模式》实例应用(Observer模式)

我工作的那点事--学习《设计模式》实例应用(Observer模式)

原创 IT生活 作者:biqing0427 时间:2007-12-03 11:44:33 0 删除 编辑

今天早上一到公司,看到公司人事群发过来的邮件,通知下午开会,现在人事也比较方便的,利用现代科技,不用一个个当面通知了,记得以前小时候上学当大队长那会,假如有什么活动,还写在小黑板上呢,有时候还要一个个当面通知,非常麻烦的,大人们都担心耽误我的学习,不让参加这些活动,赫赫,现在看来完全没有这个必要的。

这段时间学习设计模式,这个方式一下子让我想起了 Observer 模式,这个模式太明显了,说白了,就是一个人有什么变化消息,自动通知其他人。

[@more@]

从这个例子中,可以看出 人事就是 Observable,同事就是各个Observer了。

Java的JDK中有对这个模式的封装,不过个人觉得为了深刻理解,自己写了个。

1。人事
//定义接口
public interface Observable {

public void registerObserver(Object object);

public void removeObserver(Object object);

public void notifyObservers();

public void setInfo(String info);

public String getInfo();
}

public class HRObservable implements Subject {
List list = new ArrayList();
String info = "";

//为了让新员工注册
public void registerObserver(Object object){
list.add(object);
};

//如果有员工离职了,一定要记得把他从名单中删掉啊
//不然他还是可以得到公司的一些信息的
public void removeObserver(Object object){
int i = list.indexOf(object);
if(i>=0){
list.remove(i);
}
};

//有什么事情在这里通知了
public void notifyObservers(){
for(int i=0;i Observer observer = (Observer)list.get(i);
observer.upData(info);
}

};

//设置通知信息
public void setInfo(String info){
this.info = info;
notifyObservers();
};

//假如员工没有收到,自己也可以到hr处获得相关信息
public String getInfo(){
return info;
};
}

2.员工

public interface Observer {
public void upData(String info);
}

//员工one,这里相当于有个接受的接口,相当于信箱之类的。
public class FellowOne implements Observer {

public void upData(String info){
System.out.println("now FellowOne gets a message from HR:"+info);
};
}

//员工Two,这里相当于有个接受的接口,相当于信箱之类的。
public class FellowTwo implements Observer {

public void upData(String info){
System.out.println("now FellowTwo gets a message from HR:"+info);
};
}


3.一切都准备好了,下面看看我们的HR怎么通知开会的吧:

public void testMyObserver() {

Subject subject = new HRSubject();
Observer one = new FellowOne();
Observer two = new FellowTwo();

subject.registerObserver(one);//员工one注册
subject.registerObserver(two);//员工two注册

subject.setInfo("now having a meeting");//通知开会了

//如果有人离职了,怎么办呢

System.out.println("fellowOne has lefe");

subject.removeObserver(one);

subject.setInfo("now having a meeting talk about FellowOne leaving");

}

5.看看结果吧:

now FellowOne gets a message from HR:now having a meeting
now FellowTwo gets a message from HR:now having a meeting
fellowOne has lefe
now FellowTwo gets a message from HR:now having a meeting talk about FellowOne leaving

果然FellowOne得不到信息了。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9879276/viewspace-987662/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    24
  • 访问量
    11404