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.