观察者模式

来源:互联网 发布:无线网测试软件 编辑:程序博客网 时间:2024/06/06 19:04

观察者模式

观察者模式就是一种 “发布者-订阅者”的模式。有时也被称为 “模型-视图”模式, “源-监听者” 模式等。在这种模式中,由一个目标对象来管理所有依赖于它的观察者对象,并且当这个目标对象自身发生改变时,会主动向它的观察者们发出通知。

观察者模式类图

比如你最近在追一个美剧《生活大爆炸》, 假设著名在线视频网站某狐买下独家版权,在线更新与播放。于是你天天等,等他的更新通知一来,你就去看那些最新的视频。

`    public interface Subject {        public void registerObserver(Observer o);        public void removeObserver(Observer o);        public void notifyAllObservers();    }    //观察者接口    public interface Observer {        public void update(Subject s);    }    //视频网站某狐 实现 Subject 接口    public class VideoSite implements Subject {        //观察者列表 以及 更新了的视频列表        private ArrayList<Observer> userList;        private ArrayList<String> videos;        public VideoSite() {            userList = new ArrayList<Observer>();            videos = new ArrayList<String>();        }        public void registerObserver(Observer o) {            userList.add(o);        }        public void notifyAllObservers() {            for (Observer o: userList)                o.update(this);        }        public void addVideos(String video) {            this.videos.add(video);            notifyAllObservers();        }        public ArrayList<String> getVideos() {            return videos;        }        public String toString() {            return videos.toString();           }    }    //实现观察者,即看视频的美剧迷们    public class VideoFans implements Observer {        private String name;        public VideoFans(String name) {            this.name = name;        }        public void update(Subject s) {            System.out.println(this.name + ",new videos are available!");            System.out.println(s);        }    }    public class Main {        public static void main(String[] args) {            VideoSite vs = new VideoSite();            vs.registerObserver(new VideoFans("LiLei"));            vs.registerObserver(new VideoFans("HanMeimei");            vs.registerObserver(new VideoFans("XiaoMing"));            //add videos            vs.addVideos("Video 1");        }    }`