


Let's briefly talk about publish, subscribe and observer patterns, and talk about the differences between them.
This article will introduce you to the publish-subscribe and observer patterns, and talk about the differences between the two. It has certain reference value. Friends in need can refer to it. I hope it will be helpful to everyone.
Some time ago, I had a whim and wrote promises one by one. Promise happens to be the subscription publishing model. The mobx used for development at work is also an observer model. Although they are all used, but I have never thought about the difference between the two, and the difference analysis on the Internet is confusing. I will combine a summary of my own and the simplest implementation (it is also easy to understand because it is simple) to share and deepen my understanding of the two
subscribe to publish
1. Implementation ideas
- arr Make a cache center for subscribed events
- Push the things that need to be done through on the arr cache array Middle
- When waiting for the event to trigger, emit the execution event in sequence
2. Code implementation
interface eventHub { arr: Array<Function>; on(fn: Function): void; emit(): void; } interface Person { age: number; name: string; } let eventHub: eventHub = { arr: [] as Array<Function>, // 订阅 on(fn: Function) { this.arr.push(fn); }, // 发布 emit() { this.arr.forEach((fn) => fn()); }, }; let person: Person = {} as Person; eventHub.on(() => { //订阅的事件里判断当 person长度为2时 打印person, if (Object.keys(person).length == 2) { console.log(person); } }); setTimeout(function () { person.age = 27; //发布的时候去遍历 this.arr 并执行第一次 eventHub.emit(); }, 10); setTimeout(function () { person.name = "Zoe"; //发布的时候去遍历 this.arr 并执行第二次 eventHub.emit(); }, 20);
3.Result
Although it was published twice, in the end the console in on was only executed once due to external conditions
Observer mode
1. Implementation idea
is similar to the observer pattern, but needs to be divided into an observer and the observed
- The observer and the observed Observers are associated, (internally based on the publish-subscribe model)
2. Code implementation
// 被观察者 class Subject { name: string; //实例上定义一个name属性 state: string; observers: any[]; constructor(name:string) { this.name = name; this.observers = []; this.state = ""; } attach(o) { //传入观察者 this.observers.push(o); } setState(newState) { this.state = newState; this.observers.forEach((o) => o.update(this)); } } // 观察者 class Observer { name: string; constructor(name) { this.name = name; } update(interviewee) { console.log(`${interviewee.name} say to: ${this.name} ZOE的${interviewee.state}`); } } let hr = new Subject("HR"); let observer1 = new Observer("内推者"); let observer2 = new Observer("面试者"); hr.attach(observer1); hr.attach(observer2); hr.setState("面试通过了"); // baby.setState("面试没通过");
3. Implementation result
The difference between the two
eventHub publish and subscribe
- on(subscribe ) and publishing (emit). There is no direct connection between them. They rely on the intermediate arr to connect and subscribe one push to arr. When emitting, arr is executed in sequence
##Observer mode
- There is a relationship between the observer and the observed, (internally based on the publish-subscribe model)
- Pass the instance of the observer as a parameter into the attach method of the observed and cache it in In the observers array
- When the observer setState is called, the update method of the observer in the cache array observers is called sequentially
Programming Video! !
The above is the detailed content of Let's briefly talk about publish, subscribe and observer patterns, and talk about the differences between them.. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics











How to use the event manager (EventManager) to implement the observer pattern in the Phalcon framework Introduction: The event manager (EventManager) is one of the powerful and flexible core functions in the Phalcon framework. By using event managers, you can easily implement the Observer pattern to achieve loose coupling between objects in your application. This article will introduce you to how to use the event manager in the Phalcon framework to implement the observer pattern and provide corresponding code examples. step one

Introduction PHP design patterns are a set of proven solutions to common challenges in software development. By following these patterns, developers can create elegant, robust, and maintainable code. They help developers follow SOLID principles (single responsibility, open-closed, Liskov replacement, interface isolation and dependency inversion), thereby improving code readability, maintainability and scalability. Types of Design Patterns There are many different design patterns, each with its own unique purpose and advantages. Here are some of the most commonly used PHP design patterns: Singleton pattern: Ensures that a class has only one instance and provides a way to access this instance globally. Factory Pattern: Creates an object without specifying its exact class. It allows developers to conditionally

1. What are PHP design patterns? PHP design patterns are predefined code templates designed to solve common software development problems. They provide proven solutions that improve code reusability, maintainability, and scalability. 2. Types of PHP design patterns There are many different design patterns in PHP, and each pattern has its specific purpose. The most common patterns include: Singleton Pattern: Ensures there is only one instance of a class. Factory Pattern: Creates objects of different types based on the data passed to it. Strategy mode: Allows a program to change its behavior at runtime. Observer Pattern: Allows objects to subscribe to events and be notified when events occur. 3. Singleton mode example classSingleInstance{private

How to implement distributed message publishing and subscription in PHP microservices requires specific code examples. With the popularity of microservice architecture, distributed message publishing and subscription have become an important part of building scalable and high-availability microservices. In PHP microservices, this feature can be achieved using message queues. This article will introduce how to use RabbitMQ, a common message queue tool, to implement distributed message publishing and subscription. First, we need to install RabbitMQ and configure its connection. The following is a simple PHP script

Improve Java programming skills: Master the implementation of adapter mode and observer mode, need specific code examples Introduction: In daily software development, we often need to deal with compatibility issues between different classes, and also need to implement various user interfaces Event monitoring and processing. Adapter pattern and Observer pattern are two commonly used design patterns that can effectively solve these problems. This article will introduce the implementation of adapter pattern and observer pattern in detail, and provide specific Java code examples to help readers better understand. one,

In Vue development, we often encounter problems dealing with various data interactions and component communication. One of the common questions is how to deal with the publish-subscribe pattern. The publish-subscribe pattern is a commonly used design pattern used to solve communication problems between components. In this article, I will introduce how to deal with publish-subscribe model problems encountered in Vue development. First, we need to understand the basic concepts of the publish-subscribe model. The publish-subscribe pattern is a one-to-many relationship in which one object (publisher) sends messages and other objects (subscribers) receive

Design patterns are a widely used concept in modern software development. Design patterns are common solutions found in software systems that are tested and proven to help developers build complex software applications more efficiently. The observer pattern is one of the most common design patterns, and it is also an important concept that PHP developers need to master. In this article, we will introduce the concept and implementation of the Observer pattern and demonstrate how to use it in a PHP application. What is the observer pattern? Observer pattern is a

The observer pattern in the Java framework defines behavior through interfaces and abstract classes (1); Subject and Observer classes implement management and response behavior (2); Subject provides subscription and cancellation methods, maintains observer collections, and notifies observers (3) . In the example, Subject manages observers and triggers events (4), and ConcreteObserver responds to events (5).
