观察者模式


观察者模式

  摘自网络:
  观察者模式:
   定义:一对多的依赖关系,让多个观察者同时监听某一个主体帮助。当该对象变化时,
    会通知所有的观察者,使他们的状态自动发生变化。
   优点:减少对象之间的耦合,有利于系统的复用,并保证分工合作的高效
   场合:如网站监听在线人数,并监听是什么用户做什么动作,接着发出指令或信息
  
  
  ListenerDemo.java为个人的学习总结
  
  被监听者:
    自己的属性,自己的动作,监听器群,监听者群

  监听器群:
    多个监听器

  监听者:
    自己的属性,被监听的群组,

package fengke_test;
/**
 * 学习总结
 * @author 锋客
 * <br>
 * 通过学习Demo1.java,自行编写一个观察者模式。
 *
 */
public class ListenerDemo {
 //测试
 public static void main(String[] args) {
 //创建被监听者
 Actor ac=new Actor("被监听者");
 //设置监听器
 ac.setListenertools(new listenertools() {
  @Override
  public void dorun(Listener listener) {
   listener.setName("监听者B");
   System.out.println(listener.getName()+"看到:   "+listener.getActor()+"跑步了");
   
  }
  @Override
  public void doeat(Listener listener) {
   listener.setName("监听者C");
   System.out.println(listener.getName()+"看到:   "+listener.getActor()+"吃饭了");
   
  }
 });
 
 ac.run();
 ac.eat();
 
  
 }

}

/*
 * 被监听者
 */
class Actor{
 //设置一个属性
 private String name;
 //配置监听器
 private listenertools listenertools;
 //构造器
 public Actor(String name) {
  super();
  this.name = name;
 }
 //获取名字的方法
 public String getName(){
  return this.name;
 }
 //设置监听
 public void  setListenertools(listenertools lis){
  this.listenertools=lis;
 }
 
 public void run(){
  System.out.println(name+"跑步了!!!");
  //如果存在监听,则给一个匿名内部类,将被监听者信息传入
  if(listenertools!=null){
   listenertools.dorun(new Listener(this));
  }
 }
 
 
 public void eat(){
  System.out.println(name+"吃了饭了!!!");
  //如果存在监听,则给一个匿名内部类,将被监听者信息传入
  if(listenertools!=null){
   listenertools.doeat(new Listener(this));
  }
 }
}
/*
 * 监听者
 */
class Listener{
 //监听者
 private String name;
 //被监听的人
 private Actor actor;
 //构造器
 public Listener(Actor actor){
  super();
  this.actor=actor;
 }
 //获取监听者信息
 public String getName(){
  return this.name;
 }
 //获取被监听者信息
 public Actor getActor() {
  return actor;
 }
 //设置监听者信息
 public void setName(String name){
  this.name=name;
 }
 //设置被监听者信息
 public void setActor(Actor actor) {
  this.actor = actor;
 }
 
}
/*
 * 监听工具
 *
 * 作用:将被监听者和监听者链接起来
 */
interface listenertools{
 
 public void dorun(Listener listener);
 
 public void doeat(Listener listener);
 
}

原文地址:https://www.cnblogs.com/fengke/p/4922356.html