今天早上一到公司,看到公司人事群发过来的邮件,通知下午开会,现在人事也比较方便的,利用现代科技,不用一个个当面通知了,记得以前小时候上学当大队长那会,假如有什么活动,还写在小黑板上呢,有时候还要一个个当面通知,非常麻烦的,大人们都担心耽误我的学习,不让参加这些活动,赫赫,现在看来完全没有这个必要的。
这段时间学习设计模式,这个方式一下子让我想起了 Observer 模式,这个模式太明显了,说白了,就是一个人有什么变化消息,自动通知其他人。
从这个例子中,可以看出 人事就是 Observable,同事就是各个Observer了。
Java的JDK中有对这个模式的封装,不过个人觉得为了深刻理解,自己写了个。
1。人事
2.员工
3.一切都准备好了,下面看看我们的HR怎么通知开会的吧:
5.看看结果吧:
[i]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[/i]
果然FellowOne得不到信息了。
这段时间学习设计模式,这个方式一下子让我想起了 Observer 模式,这个模式太明显了,说白了,就是一个人有什么变化消息,自动通知其他人。
从这个例子中,可以看出 人事就是 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<list.size();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.看看结果吧:
[i]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[/i]
果然FellowOne得不到信息了。