设计模式之观察者模式

来源:互联网 发布:free mobile java在线 编辑:程序博客网 时间:2024/06/06 01:27

观察者模式就像手机上订报纸

报社:Subject用户:Observer

以下是一个简单的观察者模式示例:

报社:登记用户、解绑用户、通知用户

用户:接收报纸

这里写图片描述

Subject接口如下:

/** * 被订阅方:报纸 */public interface Subject{    /**     * 注册     */    public void registObserver(Observer observer);    /**     * 解注册     */    public void removeObserver(Observer observer);    /**     * 通知更新     */    public void notityDataChange();}

Observer接口如下:

/** * 订阅者 */public interface Observer{    /**     * 更新     */    public void update(String title,String content);}

NewsPaperSubject (报社)如下:

/** * 报社(被订阅方) */public class NewsPaperSubject implements Subject{    /**     * 新闻标题     */    private String title;    /**     * 新闻内容     */    private String content;    private ArrayList<Observer> observers = new ArrayList<Observer>();    @Override    public void registObserver(Observer observer)    {        observers.add(observer);    }    @Override    public void removeObserver(Observer observer)    {        observers.remove(observer);    }    @Override    public void notityDataChange()    {        for (int i = 0; i < observers.size(); i++)        {            observers.get(i).update(title, content);        }    }    public void setNews(String title, String content)    {        this.title = title;        this.content = content;        notityDataChange();    }}

NewsPaperObserver(用户) 如下:

public class NewsPaperObserver implements Observer{    private String title;    private String content;    @Override    public void update(String title, String content)    {        this.title = title;        this.content = content;        display();    }    public void display()    {        System.out.println(title);        System.out.println(content);    }}

main方法如下:

public static void main(String[] args)    {        NewsPaperSubject subject = new NewsPaperSubject();        NewsPaperObserver observer = new NewsPaperObserver();        subject.registObserver(observer);        subject.setNews("不好啦,不好啦", "月亮掉进井里拉");    }
0 0