En virksomhed vil kunne sende notifikationer til kunder via forskellige kanaler: SMS, e-mail eller push-notifikation.
Her skal vi bruge interfaces:
Lav et interface INotifier med metoden:
void Send(String recipient, String message);
EmailNotifier → udskriver fx: „Sending EMAIL to alice@mail.com: Hello Alice“SmsNotifier → udskriver fx: „Sending SMS to +4522334455: Hello Alice“PushNotifier → udskriver fx: „Sending PUSH notification to user123: Hello Alice“NotificationService, som har en liste af Notifier-objekter.NotifyAll(String recipient, String message), der sender beskeden via alle notifiers i listen.NotificationService.Efter at have implementeret dit notifikationssystem med interfaces, skal du nu visualisere systemet med et UML-diagram. Dette hjælper med at forstå, hvordan klasser og interfaces hænger sammen, og hvordan polymorfi via interface fungerer.
Lav et UML-diagram der viser:
NotifierEmailNotifier, SmsNotifier og PushNotifierNotificationService med en liste af Notifier-objekterSend og NotifyAll)Når man tegner et interface i UML:
Når skal man bruge interfaces vs. arv?
| Situation | Brug interface | Brug arv |
|---|---|---|
| Klasser er helt forskellige, men har fælles adfærd | ✅ | ❌ |
| Klasser har fælles tilstand og fælles kode | ❌ | ✅ |
| Klassen skal kunne udføre flere roller/adfærd samtidig | ✅ (flere interfaces) | ❌ (kun én baseklasse) |
| Der er en klar „er-en“-relation | ❌ | ✅ |
| Du vil have løs kobling → nemt at udvide med nye typer | ✅ | ❌ |