JavaScript: the observer pattern with EventEmitter
In the observer pattern a subject notifies any number of observers when something happens. The subject only knows that observers are callables, so new behaviour is added by subscribing, with no change to the subject. Node.js implements the pattern in the events module.
JavaScript
const { EventEmitter } = require("node:events");
const bus = new EventEmitter();
const log = [];
bus.on("order", (id) => log.push("logged " + id));
bus.on("order", (id) => console.log("notify customer for order " + id));
bus.once("order", (id) => console.log("first order bonus for " + id));
bus.emit("order", 1);
bus.emit("order", 2);
console.log(log.join(", "));