package it.heima.netty.observer; public interface Subject { /** 注册观察者 */ void registryObserver(Observer observer); /** 移除观察者 */ void removeObserver(Observer observer); /** 通知观察者 */ void notifyObservers(); }
package it.heima.netty.observer; public interface Observer { /** * 观察者获得主题消息 * @param msg */ void update(String msg); }
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); } } }
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); } }
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(); } }
观察者张飞订阅消息:中奖号码: 12323
观察者张涛订阅消息:中奖号码: 12323
https://www.bilibili.com/video/BV1K4411z7Gf?from=search&seid=9697887334642993034
原文:https://www.cnblogs.com/smileblogs/p/13149963.html