最近做了一个系统对接,突然想起这个设计模式,与大家分享O(∩_∩)O~
观察者模式定义的是一对多的依赖关系,让多个观察者对象同时监听某一个主体对象。
这个对接的情形与此类似:航空公司实时往定制航班的客户发送航班信息(及航班信息一有变化立即通知相关客户)。
类图:
抽象主题里面定义了一个私有的链表,存放客户信息,同时定义了3个方法分别是添加(Attach)、删除(Detach)观察者的方法,Notify会将航班信息通知到各个客户。
下面是具体的类:
航班信息:
public class FightInfo {
private String fightNo;
private String fDates;
private String fArrive;
public String getFightNo(){
return this.fightNo;
}
public void setFightNo(String FightNo){
this.fightNo=FightNo;
}
public String getFDate(){
return this.fDates;
}
public void setFDate(String FDate){
this.fDates=FDate;
}
public String getFArrive(){
return this.fArrive;
}
public void setFArrive(String FArrive){
this.fArrive=FArrive;
}
定义抽象观察者
public interface Client {
public void update( FightInfo Info);
}
定义具体的观察者-客户A
public class ClientA implements Client {
public void update(FightInfo Info) {
// TODO Auto-generated method stub
System.out.print("\n");
System.out.append("A has Get the Fight Infomation!");
System.out.append(Info.getFightNo()+"*"+Info.getFDate()+"*"+Info.getFArrive());
System.out.print("\n");
}
}
定义抽象主题:
public abstract class Airlines {
private List<Client> lObserver=new ArrayList<Client>();
public void attach(Client o)
{
lObserver.add(o);
}
public void detach(Client o)
{
lObserver.remove(o);
}
public void notifyObserver(FightInfo Info)
{
for(Client c : lObserver)
{
c.update(Info);
}
}
}
定义具体的被观察者——航空服务公司
public class CocreteAirlines extends Airlines{
}
观察者和被观察者都有了 再看一下他吗之间的调用关系
public static void main(String[] args)
{
FightInfo Info=new FightInfo();
Info.setFightNo("HY8712");
Info.setFArrive("北京");
Info.setFDate("2010-10-12 12:12:12");
Client c=new ClientA();
Airlines al=new CocreteAirlines();
al.attach(c);
al.notifyObserver(Info);
}
如果有更多的客户,可以定义更多的观察者(继承Client类)即可