当前位置: 首页 > news >正文

平台网站建设报价计算机应用技术网站开发方向

平台网站建设报价,计算机应用技术网站开发方向,网站付款方式,seo优化服务商java 观察者模式示例观察者模式是行为设计模式之一 。 当您对对象的状态感兴趣并希望在发生任何更改时得到通知时#xff0c;观察者设计模式很有用。 在观察者模式中#xff0c;监视另一个对象状态的对象称为Observer #xff0c;而正在监视的对象称为Subject 。 根据GoF观察者设计模式很有用。 在观察者模式中监视另一个对象状态的对象称为Observer 而正在监视的对象称为Subject 。 根据GoF观察者模式意图是 在对象之间定义一对多依赖关系以便当一个对象更改状态时将自动通知和更新其所有依赖关系。 主题包含观察者列表以通知其状态的任何更改因此它应提供观察者可以自己注册和注销的方法。 主题还包含一种将所有更改通知所有观察者的方法它既可以在通知观察者的同时发送更新也可以提供另一种获取更新的方法。 观察者应该有一个方法来设置要监视的对象另一种方法将由Subject用来通知他们任何更新。 Java提供了一个内置平台用于通过java.util.Observable类和java.util.Observer接口实现Observer模式。 但是由于它的实现非常简单因此并未得到广泛使用并且大多数时候我们不想只为了实现Observer模式而扩展一个类因为Java在类中没有提供多重继承。 Java消息服务JMS使用Observer模式和Mediator模式来允许应用程序向其他应用程序订阅和发布数据。 模型-视图-控制器MVC框架还使用观察者模式其中模型是主题视图是观察者可以注册以获取有关模型的任何更改的通知。 观察者模式示例 对于我们的示例我们将实现一个简单的主题观察者可以注册该主题。 每当将任何新消息发布到该主题时所有注册观察者都会收到通知他们可以使用该消息。 根据主题的要求这里是基本主题接口用于定义任何具体主题要实施的合同方法。 package com.journaldev.design.observer;public interface Subject {//methods to register and unregister observerspublic void register(Observer obj);public void unregister(Observer obj);//method to notify observers of changepublic void notifyObservers();//method to get updates from subjectpublic Object getUpdate(Observer obj);} 接下来我们将为Observer创建合同将有一种方法将Subject附加到观察者另一种方法供Subject用来通知任何更改。 package com.journaldev.design.observer;public interface Observer {//method to update the observer, used by subjectpublic void update();//attach with subject to observepublic void setSubject(Subject sub); } 现在我们的合同已经准备好了让我们继续本主题的具体实施。 package com.journaldev.design.observer;import java.util.ArrayList; import java.util.List;public class MyTopic implements Subject {private ListObserver observers;private String message;private boolean changed;private final Object MUTEX new Object();public MyTopic(){this.observersnew ArrayList();}Overridepublic void register(Observer obj) {if(obj null) throw new NullPointerException(Null Observer);if(!observers.contains(obj)) observers.add(obj);}Overridepublic void unregister(Observer obj) {observers.remove(obj);}Overridepublic void notifyObservers() {ListObserver observersLocal null;//synchronization is used to make sure any observer registered after message is received is not notifiedsynchronized (MUTEX) {if (!changed)return;observersLocal new ArrayList(this.observers);this.changedfalse;}for (Observer obj : observersLocal) {obj.update();}}Overridepublic Object getUpdate(Observer obj) {return this.message;}//method to post message to the topicpublic void postMessage(String msg){System.out.println(Message Posted to Topic:msg);this.messagemsg;this.changedtrue;notifyObservers();}} 注册和注销观察者的方法实现非常简单额外的方法是postMessage 客户端应用程序将使用该方法将String消息发布到主题。 请注意布尔变量可跟踪主题状态的变化并用于通知观察者。 此变量是必需的这样如果没有更新并且有人调用notifyObservers方法它就不会向观察者发送错误的通知。 还请注意在notifyObservers方法中使用了同步 以确保仅将消息发送给在将消息发布到主题之前注册的观察者。 这是将监视该主题的Observers的实现。 package com.journaldev.design.observer;public class MyTopicSubscriber implements Observer {private String name;private Subject topic;public MyTopicSubscriber(String nm){this.namenm;}Overridepublic void update() {String msg (String) topic.getUpdate(this);if(msg null){System.out.println(name:: No new message);}elseSystem.out.println(name:: Consuming message::msg);}Overridepublic void setSubject(Subject sub) {this.topicsub;}} 注意 update方法的实现是在调用Subject getUpdate方法来获取消息时使用的。 我们可以通过将message作为参数传递给update方法来避免此调用。 这是使用我们的主题实现的简单测试程序。 package com.journaldev.design.observer;public class ObserverPatternTest {public static void main(String[] args) {//create subjectMyTopic topic new MyTopic();//create observersObserver obj1 new MyTopicSubscriber(Obj1);Observer obj2 new MyTopicSubscriber(Obj2);Observer obj3 new MyTopicSubscriber(Obj3);//register observers to the subjecttopic.register(obj1);topic.register(obj2);topic.register(obj3);//attach observer to subjectobj1.setSubject(topic);obj2.setSubject(topic);obj3.setSubject(topic);//check if any update is availableobj1.update();//now send message to subjecttopic.postMessage(New Message);}} 当我们运行上面的程序时我们得到以下输出。 Obj1:: No new message Message Posted to Topic:New Message Obj1:: Consuming message::New Message Obj2:: Consuming message::New Message Obj3:: Consuming message::New Message观察者模式类图 观察者模式也称为发布-订阅模式。 它的一些实现是 Swing中的java.util.EventListener javax.servlet.http.HttpSessionBindingListener javax.servlet.http.HttpSessionAttributeListener 这就是Java中Observer模式的全部内容希望您喜欢它。 通过评论和与他人分享来分享您的爱。 参考 Java的观察者设计模式- 开发者食谱博客上的JCG合作伙伴 Pankaj Kumar的示例教程 。 翻译自: https://www.javacodegeeks.com/2013/08/observer-design-pattern-in-java-example-tutorial.htmljava 观察者模式示例
http://www.zqtcl.cn/news/300932/

相关文章:

  • 做内贸注册什么网站广州市建设交易中心网站
  • 点样用外网访问自己做的网站北京市网站设计公司网址
  • 用备案的网站做违法网站wordpress个性404
  • 中国制造网官方网站下载安装我国做民宿的网站
  • 英文网站seo广州市软件开发有限公司
  • 锦州网站建设渠道山西做网站的公司有哪些
  • 4线城市搞网站开发丹灶网站建设公司
  • 青岛网站建设seo优化wordpress分类标题自定义
  • 网站开发本地环境在海南注册公司需要多少钱
  • 济南网站开发去哪儿旅行app下载安装
  • 大城 网站北京做网站男生工资
  • 赣州网站建设百家号免费软件网
  • 在合肥做网站多少钱网站开发外包平台
  • 百度指数查询平台网站建设SEO优化哪家好
  • 网站怎么在成都备案中企动力如何
  • 免费数据统计网站app推广拉新一手渠道
  • 网站推广效果不好原因zac seo博客
  • 高端网站设计合肥网站建设个人网站建设公
  • 廊坊建站模板系统做效果图的网站
  • 建网站打开需要验证四川省成都市建设厅官网
  • 网站文章列表如何排版珠海建设工程信息网站
  • 郑州个人做网站建设银行招聘网站
  • 杭州网站设计公司联系亿企邦网站怎么上百度
  • 网站建设的未来网站不备案访问
  • 网站改版效果图怎么做网站建设的五个基本要素
  • 河南建站网站做o2o网站需要多少钱
  • 重庆企业网站定制开发公司wordpress用户页
  • 电子商务网站seo网站规划与设计方向
  • 外贸双语网站源码wordpress 柚子
  • 隆昌市住房和城乡建设厅网站html5网页成品代码