Announcement

Collapse
No announcement yet.

OO-Modellierung!

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • OO-Modellierung!

    Hallo,

    Ich habe ein kleine Frage zu OO Modellierung.

    Ich habe ein Problem, wo ich noch keine Lösung gefunden habe die mich zu fireden stellt!

    Es gibt in einem Projeckt an dem ich Arbeite, verschiedene Klassen die zwar einer Kategorie angehören aber sowohl der Datensatz als auch die Methode die daraus ein Ergebniss berechnet, unterschiedlich sind. z.B.:

    class A1 {

    int a;
    int b;

    int result() {
    return a+b;
    }
    }

    class A2 {

    double a;
    int b;
    int c;

    double result() {
    return (b/c)*a;
    }
    }
    Wo bei A1 und A2 aus der Kategorie A_Designer stammen.

    Mein Ziel ist es, dass in dem System wo meine Klassen benutzt werden, bei Erweiterungen von neuen Klassen einer Bekannten Kategorie nur die neuen Klassen, sprich den neuen Datensatz und die neue Berechnung implementiert werden sollten und das System sollte automaisch die neuen Datensätzte dem Berechnungen zuordenen und Ausführen. Ich möchte halt vermeiden, oder wenigsten den Aufwand minimal halten, das bei neuen Datensätzen und Berechnungsregeln das ganze System angepackt werden muss.

    Falls einer eine Idee hat oder ein bekanntest Pattern kennt wäre ich sehr dankbar!

    Vielen Dank im Voraus!

    Gruß,

    Martin

  • #2
    Hallo Martin,

    da wäre eine Fabrik ganz praktisch. Zunächst sollte es einen Obertyp geben (Schnittstelle oder Klasse).

    Code:
    interface Resulter { int result(); }
    Das müssen alle Klassen dann implementieren.

    Code:
    class A1 implements Resulter …
    Später kommen neue Klassen dazu.

    Die Fabrik ResulterFactory wird nun eine Methode Resulter getResulter(auswahl) bekommen, sodass man etwa schreiben kann:

    Code:
    Resulter r = ResulterFactory.getResulter(auswahl);
    inr re = r.result();
    Um die Objektzustände dem Resulter zu geben, kann vorher eine Methode setParameter( Object... params ) aufgerufen werden.

    auswahl kann nun irgendein Unterscheidungsmerkmal sein, also int, String, enum. Eine einfache Fallunterscheidung (kann auch eine Map sein), wählt dann den richtigen Resulter aus.

    Code:
    Resulter getResulter(String auswahl)
    {
      if ( auswahl.equals("A1") ) return new A1();
       …
    }
    Bei neuen Berechnungen ist nur die Factory anzupassen.

    Grüße

    Christian

    Comment

    Working...
    X