200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 2.设计模式-观察者模式(发布-订阅模式)

2.设计模式-观察者模式(发布-订阅模式)

时间:2023-11-17 17:53:09

相关推荐

2.设计模式-观察者模式(发布-订阅模式)

观察者模式(发布-订阅模式)一个简单的使用

简介例子被监听者(被观察者)监听者(观察者)测试类

简介

观察者模式(有时又被称为模型(Model)-视图(View)模式、源-收听者(Listener)模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实现事件处理系统。(来源百度百科)

例子

观察者模式他类似于发布-订阅模式,通过一方的改变去通知改变另一方的改变,好比微信公众号,我们通过关注某个微信公众号,当公众号发布文章时,我们就会收到通知,看到文章内容,JDK的java.util包提供了两个类Observer、Observable

现在瞧瞧下面的小栗子:

被监听者(被观察者)

/*** 公众号 -- 被监听者(被观察者)*/public class OfficeObServable extends Observable {// 公众号名private String name;public OfficeObServable(String name){this.name = name;}public void news(String info){System.out.println("公众号【" + name + "】更新内容啦!");this.setChanged();this.notifyObservers(info);}}

监听者(观察者)

/*** 用户 -- 监听者(观察者)*/public class UserObServer implements Observer {// 用户名private String name;public UserObServer(String name){this.name = name;}@Overridepublic void update(Observable o, Object arg) {System.out.println("用户【"+name+"】获取通知:"+arg);}}

由此可看出:

被观察者:我们只需要继承Observable 类,然后写一个新的方法,比如news()发布新的资讯,this.setChanged(); 表示被观察者发生了改变,而 this.notifyObservers(info);则表示将改变的内容info,发给所有的订阅者。观察者:需要实现Observer 接口,并且实现Observer 接口中的update(Observable o, Object arg);方法,这里就是上面的被观察者调用notifyObservers()方法后执行的方法,update()方法将获取被观察者的更新内容。

测试类

@Testpublic void ObServableTest(){// 两个公众号OfficeObServable officeObServable1 = new OfficeObServable("java知音");OfficeObServable officeObServable2 = new OfficeObServable("程序猿DD");// 三个用户UserObServer userObServer1 = new UserObServer("大雄");UserObServer userObServer2 = new UserObServer("丁香");UserObServer userObServer3 = new UserObServer("胖虎");// 大雄、丁香、胖虎都订阅java知音officeObServable1.addObserver(userObServer1);officeObServable1.addObserver(userObServer2);officeObServable1.addObserver(userObServer3);// 丁香、胖虎订阅程序猿DDofficeObServable2.addObserver(userObServer2);officeObServable2.addObserver(userObServer3);// 公众号推文officeObServable1.news("MyBatis内容聚合");officeObServable2.news("Spring Batch入门教程");}

执行结果

公众号【java知音】更新内容啦!用户【胖虎】获取通知:MyBatis内容聚合用户【丁香】获取通知:MyBatis内容聚合用户【大雄】获取通知:MyBatis内容聚合公众号【程序猿DD】更新内容啦!用户【胖虎】获取通知:Spring Batch入门教程用户【丁香】获取通知:Spring Batch入门教程

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。