Laden...

Platzhalter/Variable für Methoden [==> Strategie-Muster]

Letzter Beitrag vor 12 Jahren 7 Posts 2.200 Views
Platzhalter/Variable für Methoden [==> Strategie-Muster]

Hallo,

ich stehe vor folgendem Problem:

Mir sind zwei Methoden gegeben, die eine Zahl zurückgeben und identische Parameter annehmen.


private static int Preis1(string element)
        {
            int preis = 0;
            //Berechnugen Typ 1
            return preis ;
        }

private static int Preis2(string element)
        {
            int preis = 0;
            //Berechnugen Typ 2
            return preis ;
        }

Diese beiden Methoden möchte/soll ich nicht ändern.

Nun habe ich eine sehr komplexe Methode geschrieben, in der die erste der beiden oben genannten Methoden Verwendung findet.


private void gesamtPreisAusrechnen()
{
      int gespreis = 0;
      //Berechnungen ...
      gespreis += Preis1("produkt a");
      //Berechnungen ...
      gespreis += Preis1("produkt b");
      //usw.
}

Die ganze Gesamtberechnung müsste ich auch noch mal mit den Werten von Preis 2 machen.
Ich möchte aber ungerne den ganzen Code doppelt kopieren oder bei jedem Aufruf von _Preis1 _in _gesamtPreisAusrechnen _ eine if-else-Abfrage machen.

Mit kam folgende Idee, jedoch weiß ich nicht, wie ich das umsetzen kann oder ob man sowas überhaupt in die Richtung umsetzen kann.


private void gesamtPreisAusrechnen(bool preis2Verwenden)
{
      private voidhalter preisMethode = null;
      if (preis2Verwenden)
      {
              preisMethode = Preis2;
      }
      else
      {
              preisMethode = Preis1;
      }

      int gespreis = 0;
      //Berechnungen ...
      gespreis += preisMethode("produkt a");
      //Berechnungen ...
      gespreis += preisMethode("produkt b");
      //usw.
}

EDIT: Gibt es eine Art Platzhalter für Methoden mit dem selben Parameter?

Viele Grüße,
Raffi

Wenn ich nicht hier bin, findest du mich auf code-bude.net.

Hallo blutiger_anfänger,

das ist deine Frage?

Eigentlich egal, die Antwort ist Strategy-Pattern. 😃

herbivore

Da hatte sich wohl ein Copy/Paste-Fehler eingeschlichen, aber dennoch hast du mein Anliegen ja erkannt. Danke für die Antwort, herbi! 😃

Wenn ich nicht hier bin, findest du mich auf code-bude.net.

Eine andere Möglichkeit wäre ein Delegate zu verwenden.

Strategie-Pattern dürfte aber sauberer sein. Ich wollte es nur erwähnt haben.

Grüße
Nils

Hallo nilres,

Strategie und Delegaten schließen sich ja nicht aus. Somit lässt sich auch mit Delegaten eine Strategie umsetzen.

Das GoF-Muster Strategie ist jedoch allgemeiner gehalten und verzichtet auf "Sprachfeatures" wie Delegaten.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

Wobei ich mit den Delegaten im Prinzip stark detallierte Interfaces definiere, darum seh ich nicht so den Sinn, zusätzlich noch mit Interfaces rumzufrickeln.

q.e.d.

Wobei ich mit den Delegaten im Prinzip stark detallierte Interfaces definiere, darum seh ich nicht so den Sinn, zusätzlich noch mit Interfaces rumzufrickeln.

IMHO hängt das auch von der Länge der Berechnungen ab: Wenn diese etwas länger sind und evtl. von mehreren Stellen übergeben werden sollen, ist eine Klasse meist übersichtlicher.