zoukankan      html  css  js  c++  java
  • 观察者模式


    观察者模式

      摘自网络:
      观察者模式:
       定义:一对多的依赖关系,让多个观察者同时监听某一个主体帮助。当该对象变化时,
        会通知所有的观察者,使他们的状态自动发生变化。
       优点:减少对象之间的耦合,有利于系统的复用,并保证分工合作的高效
       场合:如网站监听在线人数,并监听是什么用户做什么动作,接着发出指令或信息
      
      
      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);
     
    }

  • 相关阅读:
    SpringCloud(一)概念及设计
    SpringBoot2(十三)HttpMessageConverter
    SpringBoot2(十二)当Shiro遇上RedisCache
    SpringBoot2(十一)集成RedisCache
    UDP协议解析 以及和TCP协议的区别
    TCP协议解析及相关问题
    mybatis缓存机制
    MYSQL数据库类型与JAVA类型对应表
    Java HashMap问题
    Java数据库事务四大特性以及隔离级别
  • 原文地址:https://www.cnblogs.com/fengke/p/4922356.html
Copyright © 2011-2022 走看看