观察者模式

来源:互联网 发布:禅道linux一键安装包 编辑:程序博客网 时间:2024/06/07 06:26
  1. 首先看看UML图:
    这里写图片描述
    注:UML图与类图关系
    • 关联association
      作为属性,如上图所示,Observer 对象作为Subject类的属性Field
    • 依赖dependency
      作为方法的参数, 如上图所示,Observer 对象作为方法attach中的参数
      抽象观察者:
public interface Observer {    public void update(String message);}

具体观察者(ConcreteObserver):

public class WeixinUser implements Observer{    private String name;    public WeixinUser(String name){        this.name = name;    }    @Override    public void update(String message){    System.out.println(name +"-"+message);    }}

抽象的被观察者(Subject)

public interface Subject {    /**    *增加订阅者    **/    public void attach(Observer observer);    /**    *增加订阅者    **/    public void detach(Observer observer);    /**     * 通知订阅者更新消息     */     public void notify(String message);}

抽象的被观察者(Subject)

public class CertainSubject implements Subject {private List<Observer> weixinUserList = new ArrayList<Observer>();    @Override    public void attach(Observer observer){    weixinUserList.add(observer);    }    @Override    public void detach(Observer observer){    weixinUserList.remove(observer);    }    @Override    public void notify(String message){        for(Observer observer:weixinUserList){        observer.update(message);        }    }}

客户端调用:

public class Client {    CertainSubject subject = new CertainSubject();    //创建微信用户(**注册观察者**)        WeixinUser user1=new WeixinUser("杨影枫");        WeixinUser user2=new WeixinUser("月眉儿");        WeixinUser user3=new WeixinUser("紫轩");        subject.attach(user1);        subject.attach(user2);        subject.attach(user3);        subject.notify("刘望舒的专栏更新了");}}

从类CertainSubject可以看出方法notify调用被观察者Observer的update方法,所以有下图顺序图, 在观察者模式的UML图中并没有反映出该种关系

这里写图片描述

参考:
http://blog.csdn.net/lfsf802/article/details/8987267

http://blog.csdn.net/itachi85/article/details/50773358http://blog.csdn.net/itachi85/article/details/50773358

0 0
原创粉丝点击