0 Tage Serie
javascript / intermediate
Snippet

Polymorphe Benachrichtigungsdienste über Dependency Injection

Polymorphie ermöglicht austauschbare Dienst-Implementierungen. Durch die Definition einer abstrakten Basisklasse als Schnittstellenvertrag und das Injizieren von Unterklassen-Instanzen in Vue-Komponenten können Implementierungen (z. B. Toast- oder Modal-Notifier) flexibel ausgetauscht werden.

snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import { provide, inject } from 'vue';
const SERVICE_KEY = Symbol('NotificationService');
class BaseNotifier {
notify(message) {
throw new Error('Method not implemented');
}
}
class ToastNotifier extends BaseNotifier {
notify(message) {
console.log(`[TOAST UI]: ${message}`);
}
}
export function provideNotifier(notifierInstance) {
if (!(notifierInstance instanceof BaseNotifier)) {
throw new TypeError('Invalid notifier implementation');
}
provide(SERVICE_KEY, notifierInstance);
}
export function useNotifier() {
return inject(SERVICE_KEY, new ToastNotifier());
}
vue
Erklärung
1
class BaseNotifier {
Definiert eine abstrakte Basisklasse mit dem geforderten Schnittstellenvertrag.
2
class ToastNotifier extends BaseNotifier {
Implementiert das konkrete Benachrichtigungsverhalten durch Überschreiben der Methode.
3
if (!(notifierInstance instanceof BaseNotifier)) {
Erzwingt Typkonformität, damit das injizierte Objekt der Klassenhierarchie entspricht.
4
return inject(SERVICE_KEY, new ToastNotifier());
Injiziert die bereitgestellte Instanz oder fällt auf eine Standard-Unterklasse zurück.