• Keine Ergebnisse gefunden

FB Automatisierung und Informatik

N/A
N/A
Protected

Academic year: 2021

Aktie "FB Automatisierung und Informatik"

Copied!
19
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Wahlpflichtfach Design Pattern

Dipl.-Inf., Dipl.-Ing. (FH) Michael Wilhelm

Hochschule Harz

FB Automatisierung und Informatik

miwilhelm@hs-harz.de

http://www.miwilhelm.de

Raum 2.202

Tel. 03943 / 659 338

(2)

FB Automatisierung und Informatik: Design Pattern 2

Inhalt

1. Einleitung 2. Singleton

3. Observer

4. Decorator

5. Abstract Factory 6. Command

7. Komposition 8. Strategie

9. Adapter vs. Bridge

(3)

MDI-Fenster:

Daten in einer Tabelle

Daten in einer Grafik

Problem:

Datenaktualisierung

(4)

FB Automatisierung und Informatik: Design Pattern 4

2. Beispiel: Observer Pattern

Problem:

Mehrere Objekte einer Gruppe müssen sich benachrichtigen, wenn einige Attribute geändert wurden. Die Viewer sind nicht

„bekannt“.

Smalltalk: Model-View-Controller

MFC Dokument-View-Architektur

Java: Model-View-Architektur

(5)

Beispiel: Observer Pattern MVC

Modell View

Controller

(6)

FB Automatisierung und Informatik: Design Pattern 6

Beispiel: Observer Pattern MVC

Modell

View

View

(7)

Das Model kann man sich als das Datenmodell (Datei, Datenbank) vorstellen, der den aktuellen Zustand und das

Verhalten des gesamten Systems repräsentiert (Datenhaltung, Anwendung)

Der View hat die Aufgabe die Daten des Models auf irgend eine Art darzustellen. Dabei hat der View nur die Aufgabe, die Daten darzustellen (Visualisierung, Darstellung)

Der Controller setzt die eingehenden Anforderungen (z.B.

Eingaben von der Tastatur oder Maus) in Methoden um, die das Model dazu veranlassen, die Daten entsprechen zu verändern (Datenmanipulation, Steuerung)

Beispiel: Observer Pattern MVC

(8)

FB Automatisierung und Informatik: Design Pattern 8

(9)

hat K.

extends

interface

(10)

FB Automatisierung und Informatik: Design Pattern 10

Observer Pattern (MVC ohne Controller)

Modell

View update

JFrame

Komposition

getData setData Daten

View-Liste

notify

(11)

Observable

Observer

interface

Observer Pattern (MVC ohne Controller)

Modell

View update

JFrame

Komposition

getData setData Daten

View-Liste

notify

(12)

FB Automatisierung und Informatik: Design Pattern 12

Observable

Observer

interface

Observer Pattern (MVC ohne Controller)

Modell

View update

JFrame

Komposition

Sende SMS Daten

notify

Controller

View-Liste

Regist

getData setData

(13)

Observer Pattern

Modell

View JFrame

1. open

2. create:

Data / Modell 3. Registrierung

getData

5. Change setData

6. Update, an alle

7. getData() 4. Ein View ändert Daten

(14)

FB Automatisierung und Informatik: Design Pattern 14

Bemerkungen zum Observer Pattern

• Entkopplung

- Subjekt kennt nur Observer-Interface, keine konkreten Observer - update = dynamisch gebunden => upcalls

• Falls Observer von mehreren Subjekten abhängen sollen:

- update(Observable o)

• Falls Art der Änderung übergeben werden soll: push vs pull - notifyObservers(Object arg)

- update(Observable o, Object arg)

• Wann wird notify aufgerufen?

- Zustandsänderungsfunktion => i.a. viele updates

- Verzögert & explizit: changed-Flag: setChanged / clearChanged

* notifyObservers wird nur aktiv wenn isChanged() == true

* notifyObservers ruft clearChanged auf

(15)

Bemerkungen zum Observer Pattern

• Kausalität der Änderungen

- Verbieten von Änderungen während update - Queueing-Mechanismus

• Multithreading

- Während der Meldung „notify“ kann add/remove des Observers aufgerufen werden. Die Listenerliste wird geändert

(InvalidStateException bei Iterator)

* synchronized(this){

for(int i=0; i<observers.size(); i++){…..

* Vector v;

synchronized(this){v = (Vector)observers.clone();}

for(int i=0; i<v.size(); i++){…

• Interfaces vs. Classes

(16)

FB Automatisierung und Informatik: Design Pattern 16

Java-Beispiel: Main-Frame

public class MVC extends JFrame { private Modell modell;

public MVC() {

modell = new Modell();

modell.setName("Paul");

}

void MnNew_actionPerformed(ActionEvent e) {

MyInternalFrame1 frame = new MyInternalFrame1(modell);

frame.setBounds( 10, 10, 250, 50);

_desktopPane.add(frame);

} }

(17)

Java-Beispiel: Anlegen eines „Datenmodells“

class Modell extends java.util.Observable { String sName= "Freya";

public String getName() { return sName;

}

public void setName(String Name) { this.sName = Name;

}

public void DataChangedFromViewer(String s) { System.out.println("s in myData: "+s);

this.setName(s);

super.setChanged();

super.notifyObservers();

}

(18)

FB Automatisierung und Informatik: Design Pattern 18

Java-Beispiel: Clientfenster

class MyInternalFrame extends JInternalFrame implements Observer { private Modell modell;

public MyInternalFrame(Observable DatenModell) { modell = (Modell) DatenModell;

DatenModell.addObserver(this); // Registrierung edit.setText( modell.getName() );

}

(19)

Java-Beispiel: Clientfenster2

public void setGUI() {

edit.addActionListener(new java.awt.event.ActionListener() { // Aufgerufen wenn Return-Taste

public void actionPerformed(ActionEvent e) { edit_Change(e);

} });

} // setGUI

public void update(Observable o, Object arg) { System.out.println("Update");

edit.setText( modell.getName() );

}

void edit_Change(ActionEvent e) { System.out.println("geändert");

modell.DataChangedFromViewer( edit.getText() );

Referenzen

ÄHNLICHE DOKUMENTE

ln den Stadtplanungsämtern bestand lange Zeit - und besteht an einigen Stellen heute noch - eine durch jahrzehntealte Ausbil- dungstradition begünstigte Abneigung ge- gen

Jeder Fachbereich muss eine Beziehung leiten eingehen, d.h., jeder Fachbereich wird von einem Mitarbeiter geleitet. Ein Mitarbeiter muss nicht unbedingt die Beziehung leiten

Ein elementarer Ausdruck der relationalen Algebra ist eine Relation in der Datenbank (z.B. Salzburg) Datenbanken / Relationales Modell Wintersemester 2013/14 81 / 118

Margrit Kaufmann hat in all diesen Jahren nicht nur gelernt, die Kandidatinnen für einen Gesundheitsberuf richtig einzuschätzen, sie kennt auch die verschiedenen Aufnahmebedingungen

(z-Achse stimmt mit der optischen Achse überein, alle Abstände sind in mm gemessen) Fundamentalmatrix F. entspricht der Relation

Hierzu schaust Du Dir Deinen Zweig genau an und überlegst, an welcher Stelle, zwischen welchen Zweiggabelungen am besten eine Plattform passen würde und welche Abmessungen (Länge

Das grundlegende Verständnis, dass Modelle stets Modelle von etwas sind, muss somit nicht durch direkte Instruktionen in Form theoretischer Inputs grundlegend aufgebaut werden,

1.  Diese  Bindungen  zeigen  dann  im  Modell  über  die  Ebene  des  β-­Faltblatts.  Diese  Bindungen  zeigen  dann  im  Modell  unter  die  Ebene  des