栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java技术之快速了解观察者模式

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java技术之快速了解观察者模式

  观察者模式又叫做发布-订阅模式,它根据被观察者触发的事件众多观察者执行相应的行为,前提是观察者必须向被观察者进行注册。目前流行的Spring、ZK、Mina、NIO、AWT、Swing等技术都大量使用了观察者模式。

  下图为观察者模式涉及的角色

Java培训.png" width="500" height="232" >

  孩子是一个被观察者,爸爸、妈妈、姐姐都是观察者,当被观察者触发一个事件(孩子醒来),多个观察者执行对应的行为(爸爸换尿布、妈妈喂吃的、姐姐喂水)。

  相关代码如下:

  package com.caojie.day38.observer;

  

  public interface AbstractObserver {

  

  public void action();

  }

  package com.caojie.day38.observer;

  

  public interface AbstractObserverable {

  

  public void register(AbstractObserver observer);

  

  public void noticeEvent();

  }

  package com.caojie.day38.observer;

  import java.util.ArrayList;

  import java.util.List;

  

  public class BabyObserverable implements AbstractObserverable{

  

  private List list = new ArrayList<>();

  

  @Override

  public void register(AbstractObserver observer) {

  list.add(observer);

  }

  

  @Override

  public void noticeEvent() {

  for(AbstractObserver oberver: list){

  oberver.action();

  }

  }

  }

  package com.caojie.day38.observer;

  import org.apache.log4j.Logger;

  public class Father implements AbstractObserver {

  

  private static final Logger logger = Logger.getLogger(Sister.class);

  @Override

  public void action() {

  String msg ="小孩子醒来,爸爸为它换尿布";

  if (logger.isInfoEnabled()) {

  logger.info("action() - String msg=" + msg);

  }

  }

  }

  package com.caojie.day38.observer;

  import org.apache.log4j.Logger;

  public class Mather implements AbstractObserver {

  

  private static final Logger logger = Logger.getLogger(Sister.class);

  @Override

  public void action() {

  String msg ="小孩子醒来,妈妈为他倒水";

  if (logger.isInfoEnabled()) {

  logger.info("action() - String msg=" + msg);

  }

  }

  }

  package com.caojie.day38.observer;

  import org.apache.log4j.Logger;

  public class Sister implements AbstractObserver {

  

  private static final Logger logger = Logger.getLogger(Sister.class);

  @Override

  public void action() {

  String msg ="小孩子醒来,姐姐为他擦汗";

  if (logger.isInfoEnabled()) {

  logger.info("action() - String msg=" + msg);

  }

  }

  }

  package com.caojie.day38.observer;

  public class Test {

  public static void main(String[] args) {

  AbstractObserverable observerable = new BabyObserverable();

  AbstractObserver father = new Father();

  AbstractObserver mather = new Mather();

  AbstractObserver sister = new Sister();

  //将观察者注入到被观察者中

  observerable.register(father);

  observerable.register(mather);

  observerable.register(sister);

  //小孩子触发一个事件,爸爸妈妈姐姐执行对应的行为

  observerable.noticeEvent();

  }

  }

  千锋成都Java培训作为国内IT研发人才一体化服务的开拓者,为学生制定合理有序的学习计划,0学费入学,2周免费试听不满意不收费,与学员签订就业协议,坚持良心面授,从千锋Java培训班出去的学员均已高薪就业。千锋推出的免费java视频教程,让学员能够方面的巩固基础技术能力。

相关文章

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/572218.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号