1、JDK方法实现案例需求:
去餐厅吃饭有时候需要排队,进行排队叫号。假如所有等待的人都是观察者,叫号系统就是一个被监听的主题对象。当叫号系统发出叫号通知后,所有等待的人,都会收到通知,然后检查自己的号码是否匹配。匹配的话,就开始就餐,不匹配的,继续等待
package com.gupao.jay.pattern.observer.jdk; /** * @Author JAY * @Date 2019/6/2 8:41 * @Description 排队的号码 **/ public class NumberModel { private int number; private String deskType; public NumberModel(int number, String deskType) { this.number = number; this.deskType = deskType; } public int getNumber() { return number; } public void setNumber(int number) { this.number = number; } public String getDeskType() { return deskType; } public void setDeskType(String deskType) { this.deskType = deskType; } @Override public String toString() { return "NumberModel{" + "number=" + number + ", deskType=‘" + deskType + ‘\‘‘ + ‘}‘; } }
1 package com.gupao.jay.pattern.observer.jdk; 2 3 import java.util.Observable; 4 import java.util.Observer; 5 6 /** 7 * @Author JAY 8 * @Date 2019/6/2 8:40 9 * @Description 等待的顾客 10 **/ 11 public class Consumer implements Observer { 12 13 public Consumer(int number) { 14 this.number = number; 15 } 16 17 private int number; 18 19 public int getNumber() { 20 return number; 21 } 22 23 public void setNumber(int number) { 24 this.number = number; 25 } 26 27 @Override 28 public void update(Observable o, Object arg) { 29 NumberModel numberModel = (NumberModel) arg; 30 if (numberModel.getNumber() != this.number){ 31 System.out.println("号码不匹配,继续等待。。。。"); 32 return; 33 } 34 System.out.println("排到我们了,前往" + numberModel.getDeskType() + "用餐"); 35 } 36 }
package com.gupao.jay.pattern.observer.jdk; import java.util.Observable; import java.util.Observer; import java.util.concurrent.locks.Lock; /** * @Author JAY * @Date 2019/6/2 8:42 * @Description 叫号系统 **/ public class CallNumberSystem extends Observable { private CallNumberSystem(){} private static CallNumberSystem callNumberSystem = null; public static CallNumberSystem getInstance(){ if (callNumberSystem == null){ synchronized (CallNumberSystem.class){ if (callNumberSystem == null){ callNumberSystem = new CallNumberSystem(); } } } return callNumberSystem; } public void notifyNumber(NumberModel numberModel){ System.out.println("系统播报:请" + numberModel.getNumber() + "号顾客到" + numberModel.getDeskType() + "就餐!"); setChanged(); notifyObservers(numberModel); } }
package com.gupao.jay.pattern.observer.jdk; /** * @Author JAY * @Date 2019/6/2 8:55 * @Description TODO **/ public class CallNumberSystemTest { public static void main(String[] args) { Consumer consumerA = new Consumer(10001); Consumer consumerB = new Consumer(10002); Consumer consumerC = new Consumer(10003); CallNumberSystem instance = CallNumberSystem.getInstance(); instance.addObserver(consumerA); instance.addObserver(consumerB); instance.addObserver(consumerC); instance.notifyNumber(new NumberModel(10002,"小桌A11号")); } }
2、guavaAPI实现案例需求:模拟在社区中,学生向老师提问。
1 package com.gupao.jay.pattern.observer.guava; 2 3 /** 4 * @Author JAY 5 * @Date 2019/6/2 9:11 6 * @Description 问题 7 **/ 8 public class Question { 9 10 private String userName; 11 private String content; 12 13 public String getUserName() { 14 return userName; 15 } 16 17 public void setUserName(String userName) { 18 this.userName = userName; 19 } 20 21 public String getContent() { 22 return content; 23 } 24 25 public void setContent(String content) { 26 this.content = content; 27 } 28 }
package com.gupao.jay.pattern.observer.guava; import com.google.common.eventbus.Subscribe; /** * @Author JAY * @Date 2019/6/2 9:05 * @Description TODO **/ public class Teacher { private String name; public Teacher(String name) { this.name = name; } @Subscribe public void subscribe(Question question){ //业务逻辑 System.out.println(this.name + "老师,学生" + question.getUserName() + "向你提了一个问题,问题的内容是:" + question.getContent()); } }
1 package com.gupao.jay.pattern.observer.guava; 2 3 import com.google.common.eventbus.EventBus; 4 5 /** 6 * @Author JAY 7 * @Date 2019/6/2 9:11 8 * @Description TODO 9 **/ 10 public class GuavaTest { 11 public static void main(String[] args) { 12 Question question = new Question(); 13 question.setUserName("JayNing"); 14 question.setContent("如何阅读spring源码?"); 15 16 Teacher tom = new Teacher("Tom"); 17 Teacher mic = new Teacher("Mic"); 18 19 EventBus eventBus = new EventBus(); 20 eventBus.register(tom); 21 eventBus.register(mic); 22 eventBus.post(question); 23 } 24 }
原文地址:https://www.cnblogs.com/ningJJ/p/10962303.html
时间: 2024-11-08 20:29:04