FI-25Wi-FIA-1P

1 Entwurfsmuster und Implementierung eines Benachrichtigungsmoduls 32P

Wir hatten doch Probleme den „Anfang“ zu finden, deshalb hier ein Klassendiagramm mit Test-Klasse und Code für Test-Methode.

Klassendiagramm
Klassendiagramm
public class Test{
  public LaborAnalyse al = SarsCov2Analyse.gibInstanz();
  public Patient p;
  public void test(){
    p = new Patient(13); 
    p.sarsCov2TestAbgeben();
    p = new Patient(22);
    p.sarsCov2TestAbgeben();
    al.benachrichtigen(13, 1);
    al.benachrichtigen(22, 0);
  }
}

Zuerst muss ein Patient da sein, für ihn wird ein Test im Labor abgegeben. LaborAnalyse hat eine Liste von Personen für die Analysen laufen. Wenn Analyse fertig ist wird die Person benachrichtigt.

1.1 Observer-Pattern Prinzip 10P

📖 Beobachter (Entwurfsmuster) Beim Observer-Pattern gibt es einen Informations-Erzeuger, hier die SarsCov2Analyse und einen Observer (Beobachter) der die Information haben möchte, hier der Patient. Mit Abgabe der Probe wird der Patient in die Liste der Patienten eingetragen und der Test mit der personenID gekennzeichnet durchgeführt. Steht das Ergebnis fest wird durch den Aufruf von benachrichtigenPerson(…) in der personenListe nach einem Objekt mit der personenID gesucht und dann die Operation aktualisieren(..) (Aktualisierungsschnittstelle, Call-Back-Funktion) aufgerufen.

1.2 Observer-Pattern Benachrichtigung 5P

Durch die Methode benachrichtigen(personenID:int, Ergebnis:int) der Klasse LaborAnalyse wird die Person (Observer) auch über das Ergebnis der Analyse benachrichtigt. Daher handelt es sich um eine Push-Update Notification.

1.3 Singelton-Pattern 4P

📖 Singleton (Entwurfsmuster)

Vorteile

  • Vermeiden von Problemen bei gleichzeitiger Nutzung von Ressourcen durch mehrere Instanzen.
  • Die Einzelinstanz muss nur erzeugt werden, wenn sie benötigt wird.
  • Zugriffskontrolle kann realisiert werden.

Nachteile

  • Bei Multithreading ist Synchronisierung notwendig.
  • Abhängigkeiten zur Singleton-Klasse werden verschleiert, d. h. ob eine Singleton-Klasse verwendet wird, erschließt sich nicht aus dem Interface einer Klasse, sondern nur anhand der Implementierung.
  • Das Testen eines Singleton kann kompliziert sein.
  • Eine Ressourcen-Deallokation von Ressourcen, die das Singleton verwendet, ist schwierig.

1.4 Implementieren der Klasse SarsCov2Analyse 13P

import java.util.ArrayList;
public class SarsCov2Analyse extends LaborAnalyse{
  private static SarsCov2Analyse instanz = new SarsCov2Analyse();
  
  private SarsCov2Analyse(){}
  
  public static SarsCov2Analyse gibInstanz(){
    return instanz;
  }
  public void benachrichtigen(int personenID,int ergebnis){
    ArrayList <Person> pl= gibPersonenListe();
    for (int i=0;i<pl.size();i++){
      if(pl.get(i).gibPersonenID()==personenID){
        pl.get(i).aktualisieren(ergebnis);   
      }
    }
  }
  public void benachrichtigen2(int personenID,int ergebnis){
    for(Person patient: gibPersonenListe()){
      if(personenID==patient.gibPersonenID()){
        patient.aktualisieren(ergebnis);
      }
    }
  }
}