首页 > 其他 > 详细

观察者模式(bilibili)

时间:2020-06-17 00:25:42      阅读:166      评论:0      收藏:0      [点我收藏+]

技术分享图片

 

 

技术分享图片

 

 

主题接口

技术分享图片
package it.heima.netty.observer;

public interface Subject {

    /** 注册观察者 */
    void registryObserver(Observer observer);

    /** 移除观察者 */
    void removeObserver(Observer observer);

    /** 通知观察者 */
    void notifyObservers();
}
View Code

 

观察者接口

技术分享图片
package it.heima.netty.observer;

public interface Observer {

    /**
     * 观察者获得主题消息
     * @param msg
     */
    void update(String msg);
}
View Code

 

彩票站(主题)

技术分享图片
package it.heima.netty.observer;

import java.util.ArrayList;
import java.util.List;

/**
 * 福利彩票
 */
public class WelfareLottery implements Subject {

    /** 主题存储观察者集合 */
    private List<Observer> observerList;

    /** 主题消息 */
    private String msg;

    public WelfareLottery(String msg){
        this.observerList = new ArrayList<Observer>();
        this.msg = msg;
    }

    /**
     * 存放观察者
     * @param observer
     */
    public void registryObserver(Observer observer) {
        this.observerList.add(observer);
    }

    /**
     * 删除观察者
     * @param observer
     */
    public void removeObserver(Observer observer) {
        int index = this.observerList.indexOf(observer);
        if(-1 != index){
            this.observerList.remove(index);
        }
    }

    /**
     * 通知观察者们
     */
    public void notifyObservers() {
        for (Observer observer : observerList) {
            observer.update(msg);
        }
    }
}
View Code

 

买彩票者(观察者)

技术分享图片
package it.heima.netty.observer;

public class WelfareLotteryBuyer implements Observer {

    /** 观察者姓名*/
    private String name;

    /** 主题 */
    private Subject subject;

    public WelfareLotteryBuyer(String name, Subject subject) {
        this.name = name;
        this.subject = subject;
        this.subject.registryObserver(this);
    }

    public void update(String msg) {
        System.out.println("观察者" + name + "订阅消息:" + msg);

    }
}
View Code

 

 

执行结果

技术分享图片
package it.heima.netty.observer;

public class Main {

    public static void main(String[] args) {
        Subject subject = new WelfareLottery("中奖号码: 12323");

        Observer observer1 = new WelfareLotteryBuyer("张明", subject);
        Observer observer2 = new WelfareLotteryBuyer("张飞", subject);
        Observer observer3 = new WelfareLotteryBuyer("张涛", subject);

        subject.removeObserver(observer1);
        subject.notifyObservers();

    }
}
View Code

观察者张飞订阅消息:中奖号码: 12323
观察者张涛订阅消息:中奖号码: 12323

 

https://www.bilibili.com/video/BV1K4411z7Gf?from=search&seid=9697887334642993034

 

观察者模式(bilibili)

原文:https://www.cnblogs.com/smileblogs/p/13149963.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!