首页 > 代码库 > 邮件订阅类——观察者模式

邮件订阅类——观察者模式

 观察者模式园子里的文章特别多,下面几篇都是不错的,写的也很容易理解。

http://www.cnblogs.com/java-my-life/archive/2012/05/16/2502279.html

http://www.cnblogs.com/mengdd/archive/2013/02/07/2908929.html

定义:

观察者模式是对象的行为模式,又叫发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。

观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己。

熟能生效,观察者模式既然非常适合于发布订阅这种场景,就使用这种场景来写一个例子增加对观察者模式的理解。类图如下:

 

 技术分享

1、先定义邮件的类,也就是观察者

先定义邮件接口,此接口只有一个更新的方法,用于接收更新的邮件订阅:

public interface IMail {        public void updateMail(String str);}

该接口的实现:

在更新订阅的时候,打印该邮箱主人的名称+更新内容。

public class Mail implements IMail {    private String mUserName;        public Mail(String name) {        mUserName=name;    }        @Override    public void updateMail(String str) {        System.out.print(mUserName+"收到新消息:");        System.out.print(str);        System.out.println("新消息结束!");    }}

2、定义邮件服务器类,也就是主体(被观察者)。

先定义一个IMailServer接口:

public interface IMailServer {        public void add(IMail mail);    public void remove(IMail mail);    public void notifyChange(String str);}

该接口的实现类:

public class MailServer implements IMailServer {    private List<IMail> mailList=new ArrayList<IMail>();        @Override    public void add(IMail mail) {        mailList.add(mail);    }         @Override    public void remove(IMail mail) {        mailList.remove(mail);    }    @Override    public void notifyChange(String str) {        for(IMail mail : mailList){            mail.updateMail(str);        }    }}

3、测试类以及结果:

public class TestObserver {    /**     * @param args     */    public static void main(String[] args) {                //server        IMailServer mailServer=new MailServer();                //three mail client        IMail mail1=new Mail("张三");        IMail mail2=new Mail("李四");        IMail mail3=new Mail("王五");                mailServer.add(mail1);        mailServer.add(mail2);        mailServer.add(mail3);                mailServer.notifyChange("there is 3 new mail,to update client mail!");    }}

运行结果:

张三收到新消息:there is 3 new mail,to update client mail!新消息结束!李四收到新消息:there is 3 new mail,to update client mail!新消息结束!王五收到新消息:there is 3 new mail,to update client mail!新消息结束!

 

邮件订阅类——观察者模式