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

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

这段时间学习设计模式,这个方式一下子让我想起了 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得不到信息了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值