• 设计模式学习--观察者模式


    观察者模式(Observer):观察者模式又叫发布-订阅模式,

    观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使他们能够自动的更新自己。

    Java中自带了观察者模式的Observer和Observerable。本文自己写了一个。

    案例需求:自习课,大家都在玩耍,一个学生放哨,老师来了就通知大家老师来了。

    1;创建一个通知者接口。(放哨的学生实现)

    package ObserverModel;
    
    public interface  Subj {
    
        void Attach(Obs obs);
        void detach(Obs obs);
        void message();
    }

    2:创建观察者超类。(玩耍的学生实现)

    package ObserverModel;
    
    public abstract class Obs {
    
        protected String name;
        protected Subj sub;
        public Obs (String name,Subj sub){
            this.name=name;
            this.sub=sub;
        }
        
        public abstract void update();
    }

    3:创建放哨学生的类,观察老师来没。

    package ObserverModel;
    
    import java.util.LinkedList;
    import java.util.List;
    
    public class seeTeacher implements Subj {
    
        //同事列表
        List<Obs>list=new LinkedList<Obs>();
        private String action;
        
        public String getAction() {
            return action;
        }
    
        public void setAction(String action) {
            this.action = action;
        }
    
        @Override
        public void Attach(Obs obs) {
            // TODO Auto-generated method stub
            list.add(obs);
        }
    
        @Override
        public void detach(Obs obs) {
            // TODO Auto-generated method stub
            list.remove(obs);
        }
    
        @Override
        public void message() {
            // TODO Auto-generated method stub
            for(Obs o:list){
                o.update();
            }
        }
    
    }

    4:创建玩耍的boy

    package ObserverModel;
    
    public class PlayBoy extends Obs {
    
        public PlayBoy(String name, Subj sub) {
            super(name, sub);
            // TODO Auto-generated constructor stub
        }
    
        @Override
        public void update() {
            System.out.println(name+"老师来了");
            
        }
    
        
    
    }

    5:创建玩耍的boy。

    package ObserverModel;
    
    public class PlayBoy2 extends Obs {
        
        public PlayBoy2(String name, Subj sub) {
            super(name, sub);
            // TODO Auto-generated constructor stub
        }
    
        @Override
        public void update() {
            // TODO Auto-generated method stub
            System.out.println(name+"老师来了");
        }
    
    }

    6:测试类。

    package ObserverModel;
    
    /**
     * 案例需求:老师出去了,放哨的同学通知里面玩耍的同学,老师来了。
     * 观察者模式:观察者模式又叫发布-订阅模式
     * 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听
     * 某一个主题对象,这个主题对象在状态发生改变的时候,会通知所有观察者的对象,
     * 使得他们能够自动更新自己。
     * @author 我不是张英俊
     *
     */
    public class Test {
    
        public static void main(String[] args) {
            
            seeTeacher teacher=new seeTeacher();
            PlayBoy playboy=new PlayBoy("李小璐", teacher);
            PlayBoy2 playBoy2=new PlayBoy2("哪吒", teacher);
            
            teacher.Attach(playboy);
            teacher.Attach(playBoy2);
            teacher.message();
        }
    }

    7:控制台

    李小璐老师来了
    哪吒老师来了
  • 相关阅读:
    人工智能第一次作业
    在uni-app的textarea中输入纯数字或者英文不换行的问题
    uni-app实现选择图片上传并显示进度条
    减肥计划
    前端时间格式2020-02-11T12:24:18.000+0000转化成正常格式
    男孩和女孩
    java 获取当前年份 月份 日期
    深海收破烂
    如何爱一个人
    随手心情
  • 原文地址:https://www.cnblogs.com/hrlizhi/p/7693253.html
Copyright © 2020-2023  润新知