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


    观察者模式(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:控制台

    李小璐老师来了
    哪吒老师来了
  • 相关阅读:
    23)PHP,数组操作函数
    22)PHP,数组排序函数
    21)PHP,杨辉三角
    数据库三大范式
    SQL Server 中关于EXCEPT和INTERSECT的用法
    面试准备
    面试总结
    jQuery函数attr()和prop()的区别
    SVN checkout出某个特定版本
    SVN 中的忽略文件
  • 原文地址:https://www.cnblogs.com/hrlizhi/p/7693253.html
Copyright © 2020-2023  润新知