- Published on
Event Driven Design
- Authors
- Name
- Lucas Xu
- @xianminx
Introduction
Observer Pattern
Centralized Event Management
Decouple event from event handling
Implementation
Queue
Single Thread, queue, watch
Operating System, Kernel mode, user mode
select / epoll model
GUI Design
Updating UI in dedicated thread. Single Thread UI / main thread
epoll
Windows
Android
AsyncTask
Vue
vm._events[event]
stores an array of listener functions: (vm._events[event] || (vm._events[event] = [])).push(fn)
vm.$emit
vm.$on
vm.$once(event, callback)
vm.$off([event, callback])
// node_modules/vue/src/core/instance/events.js
export function eventsMixin (Vue: Class<Component>) {
const hookRE = /^hook:/
Vue.prototype.$on = function (event: string | Array<string>, fn: Function): Component {
const vm: Component = this
if (Array.isArray(event)) {
for (let i = 0, l = event.length; i < l; i++) {
this.$on(event[i], fn)
}
} else {
(vm._events[event] || (vm._events[event] = [])).push(fn)
// optimize hook:event cost by using a boolean flag marked at registration
// instead of a hash lookup
if (hookRE.test(event)) {
vm._hasHookEvent = true
}
}
return vm
}
Javascript Event
Java Event
In Java, we implement event using interface,
See Java Swing Events
Event Hierarchy
Centralized management
sub event
distributed management
register
pub/sub
Programming Models and Philosophy
A Core Pattern for Events
Adila A. Krisnadhi1;2 and Pascal Hitzler1
1 Wright State University, OH, USA
2 Universitas Indonesia, Depok, Indonesia