您现在的位置:首页技术文章

Java培训基础 | 观察者模式--中享思途

  今天Java培训机构小编就来和大家一起学习一下java中的观察者模式,首先我先来了解一下,观察者模式又叫做发布-订阅模式,它根据被观察者触发的事件众多观察者执行相应的行为,但前提是观察者必须向被观察者进行注册。现在常用的spring,swing等技术都大量的使用了观察者模式,所以我们非常有必要去熟悉观察者。

  下面小编就以比喻的模式为大家讲解观察者模式,婴儿是一个被观察者,爸爸、妈妈、姐姐都是观察者,当被观察者触发一个事件(婴儿醒来),多个观察者执行对应的行为(爸爸换尿布、妈妈喂吃的、姐姐喂水)。

  

思途Java培训基础教程


  好了废话不多说,正菜来了上代码:

  package com.caojie.day38.observer;

  /**

  * @author caojie

  * 观察者 爸爸 妈妈

  */

  public interface AbstractObserver {

  /**

  * 被观察者触发一个事件观察者执行一系列行为

  */

  public void action();

  }

  package com.caojie.day38.observer;

  /**

  * @author caojie

  * 抽象被观察者(孩子)

  */

  public interface AbstractObserverable {

  /**

  * 被观察者有一个注册的方法,将多个观察者注入到里面

  * @param observer

  */

  public void register(AbstractObserver observer);

  /**

  * 被观察者通知观察者执行

  * 例如:婴儿醒来会触发此事件

  */

  public void noticeEvent();

  }

  package com.caojie.day38.observer;

  import java.util.ArrayList;

  import java.util.List;

  /**

  * @author caojie

  * 婴儿是一个具体被观察者

  */

  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 {

  /**

  * Logger for this class

  */

  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 {

  /**

  * Logger for this class

  */

  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 {

  /**

  * Logger for this class

  */

  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培训,从0基础开始学起,项目经理手把手教学,签订就业协议,保障学员就业,8年时间20余位行业项目经理共同研发欧洲案例教学的IT培训理念,培训过程中贯穿百余个商业项目,让学员在4-6月的培训时间内获得1-2年的项目开发经验。为企业不断输送“有效人才”。思途的服务理念是让高薪就业更简单!


 st_bottom
青岛Java培训,青岛HTML5培训,青岛UI培训,青岛web开发培训,青岛IT培训,java培训,ui培训,HTML5培训,java就业培训,专业ui设计,web开发培训,IT培训,思途教育,青岛思途,中享思途
Copyright © 青岛思途共享科技信息服务有限公司 鲁ICP备14027489号-2

鲁公网安备 37021402000988号

青岛Java培训,青岛HTML5培训,青岛UI培训,青岛web开发培训,青岛IT培训,java培训,ui培训,HTML5培训,java就业培训,专业ui设计,web开发培训,IT培训,思途教育,青岛思途,中享思途