观察者模式

作者: 降龙_伏虎 | 来源:发表于2019-06-19 11:20 被阅读0次

    1.定义

    观察者模式(Observer Pattern) 定义了对象之间一对多依赖
    让多个观察者对象同时监听一个主体对象,当主体对象发生变化时,它的所有依赖者(监听者)都会收到通知并更新
    属于行为型模式
    也叫作发布订阅模式
    

    2.JDK实现

    /**
     * Description:论坛(被观察者)
     *
     * @date 2019-05-28 20:25
     */
    
    public class Forum extends Observable {
    
        private String name = "XX论坛";
        private static Forum instance;
    
        private Forum() {
        }
    
        public static Forum getInstance() {
            if (instance == null) {
                instance = new Forum();
            }
            return instance;
        }
    
        public String getName() {
            return name;
        }
    
    
        public void publish(Question question) {
            System.out.println(question.getUserName() + "发布一个问题,具体内容为:" + question.getContent());
            setChanged();
            notifyObservers(question);
        }
    }
    
    /**
     * Description:问题
     *
     * @date 2019-05-28 20:36
     */
    
    public class Question {
    
        private String userName;
        private String content;
    
        public String getUserName() {
            return userName;
        }
    
        public void setUserName(String userName) {
            this.userName = userName;
        }
    
        public String getContent() {
            return content;
        }
    
        public void setContent(String content) {
            this.content = content;
        }
    }
    
    /**
     * Description:版主(观察者)
     *
     * @date 2019-05-28 20:38
     */
    
    public class Moderator  implements Observer {
    
        private String name;
    
        public Moderator(String name) {
            this.name = name;
        }
    
        @Override
        public void update(Observable o, Object arg) {
            Forum forum = (Forum)o;
            Question question = (Question)arg;
            System.out.println("======================================");
            System.out.println(name+"版主,你好"+"\n"
            +question.getUserName()+"在 <"+forum.getName()+"> 发布了一个问题,\n"
            +"内容:"+question.getContent());
        }
    }
    
    /**
     * Description:测试类
     *
     * @date 2019-05-28 20:44
     */
    
    public class Test {
    
        public static void main(String[] args) {
    
            Forum forum = Forum.getInstance();
            Moderator a = new  Moderator("A版主");
            Moderator b = new  Moderator("B版主");
    
            Question question = new Question();
            question.setUserName("小白");
            question.setContent("花儿为什么这样红?");
    
            forum.addObserver(a);
            forum.addObserver(b);
    
            forum.publish(question);
        }
    }
    

    3.guava实现

    public class GuavaEvent {
    
        @Subscribe
        public void  subscribe(String src){
            System.out.println("执行GuavaEvent 类的subscribe("+src+")方法");
        }
    }
    
    public class Test {
    
        public static void main(String[] args) {
            //消息总线
            EventBus eventBus = new EventBus();
            
            GuavaEvent guavaEvent = new GuavaEvent();
    
            eventBus.register(guavaEvent);
            eventBus.post("sKy");
        }
    
    }
    

    相关文章

      网友评论

        本文标题:观察者模式

        本文链接:https://www.haomeiwen.com/subject/slphqctx.html