当前位置:网站首页>Observer mode
Observer mode
2022-07-16 07:17:00 【Chenchen-】
Observer mode : Define one to many dependencies between objects , So when an object changes state , All objects that depend on him will be notified .
apply : When an event triggers , Or a state changes , Many corresponding places need corresponding changes , It can avoid excessive resource consumption caused by polling .
I thought of a beep beep Examples of video numbers being subscribed , Both video numbers and subscribers can be expanded
Source code
package Design patterns . Notifier mode ;
public class main {
// Example ideas
// b standing There's a video number , You can subscribe to the video number , And the video Number update can receive the notification of the video number
public static void main(String[] args) {
BiliBili b = new BiliBili();
b.setVideo(new VideoNo(" Video Number 1"));
b.setVideo(new VideoNo(" Video Number 2"));
UserObserver userObserver1 = new UserObserver(" user 1");
UserObserver userObserver2 = new UserObserver(" user 2");
// user 1 Subscribe to a video number 1
userObserver1.addVideo(b.getVideo(" Video Number 1"));
// user 1 Subscribe to a video number 2
userObserver1.addVideo(b.getVideo(" Video Number 2"));
// user 2 Subscribe to a video number 1
userObserver2.addVideo(b.getVideo(" Video Number 1"));
// Video Number update
b.getVideo(" Video Number 1").upData(" Video Number 1 Updated joke video ");
b.getVideo(" Video Number 2").upData(" Video Number 2 Updated eating and broadcasting video ");
// Both video numbers and users can be added dynamically
}
}
package Design patterns . Notifier mode ;
import sun.jvm.hotspot.opto.HaltNode;
import java.util.HashMap;
import java.util.Map;
public class BiliBili {
//B Stack all video numbers
Map<String,Video> videoMap = new HashMap<>();
// Get a video number
public Video getVideo(String videoName){
return videoMap.get(videoName);
}
// Put in a video number
public void setVideo(Video video){
videoMap.put(video.getVideoName(),video);
}
}
package Design patterns . Notifier mode ;
public interface Observer {
// Subscribe to a video number
void addVideo(Video v);
// Delete and subscribe to a video number
void delVideo(Video v);
// Accept notice
void printData(String data);
// Return the subscriber name
String getName();
}
package Design patterns . Notifier mode ;
/**
* Video number class
*/
public interface Video {
// Add subscribers
void addUser(Observer user);
// Reduce the number of subscribers
void delUser(Observer user);
// Update the video
void upData(String data);
// Get the name of the video number
String getVideoName();
}
package Design patterns . Notifier mode ;
import java.util.HashMap;
import java.util.Map;
public class UserObserver implements Observer {
// Subscribe to the video list
Map<String,Video> videoMap;
// Subscriber name
String userName;
public UserObserver(String userName) {
this.userName = userName;
videoMap = new HashMap<>();
}
@Override
public void addVideo(Video v) {
v.addUser(this);
videoMap.put(v.getVideoName(),v);
}
@Override
public void delVideo(Video v) {
v.delUser(this);
videoMap.remove(v.getVideoName());
}
@Override
public void printData(String data) {
System.out.println(" Subscribe to the people "+userName+" Message received :"+data);
}
@Override
public String getName() {
return userName;
}
}
package Design patterns . Notifier mode ;
import java.util.HashMap;
import java.util.Map;
public class VideoNo implements Video{
// Subscribers who need to be notified
Map<String,Observer> observerMap;
// Name of video Number
String name;
public VideoNo(String name) {
this.name = name;
this.observerMap = new HashMap<>();
}
@Override
public void addUser(Observer user) {
observerMap.put(user.getName(),user);
}
@Override
public void delUser(Observer user) {
observerMap.remove(user.getName());
}
@Override
public void upData(String data) {
for (Observer value : observerMap.values()) {
value.printData(data);
}
}
@Override
public String getVideoName() {
return name;
}
}
边栏推荐
- (一)OSI模型
- Unity3d code management template (primary writing method of single example)
- [learning progress on June 3]
- 题:二叉树的最近公共祖先
- 关于线程安全
- [learning records on June 2]
- sql变更的审批,我设置了DBA审批,为啥DBA看不到单子呢
- 散列表HashTable线性探测法类模板的实现
- Implementation method of three column layout (generally, it is required to write as much as possible)
- SAP ABAP SMOD&CMOD 二代增强遇到的问题
猜你喜欢
随机推荐
JVM目录
Unity monitor button
观察者模式
Dynamic changes based on arrays and nodes (addition, deletion, modification and query)
Implementation of dynamic array vector class template
rocket目录
【6月2号学习记录】
The official case of unity rubyadventure
LeetCode精讲——1217.玩筹码(难度:简单)
Unity2d fruit ninja case
硬件课程设计:基于STM32的多功能播放器之系统设计
关于线程安全
LeetCode精讲——873. 最长的斐波那契子序列的长度(难度:中等)
Web review
unity2d水果忍者案例
散列表HashTable分离链接法类模板的实现
unity3d-MonoBehaviour基类
独立游戏笔记-001 一个世界的开始
散列表HashTable线性探测法类模板的实现
散列表HashTable








