Laden...

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

Erstellt von blutiger_anfänger vor 12 Jahren Letzter Beitrag vor 12 Jahren 2.155 Views
B
blutiger_anfänger Themenstarter:in
293 Beiträge seit 2008
vor 12 Jahren
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.

49.485 Beiträge seit 2005
vor 12 Jahren

Hallo blutiger_anfänger,

das ist deine Frage?

Eigentlich egal, die Antwort ist Strategy-Pattern. 😃

herbivore

B
blutiger_anfänger Themenstarter:in
293 Beiträge seit 2008
vor 12 Jahren

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.

N
60 Beiträge seit 2010
vor 12 Jahren

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

6.911 Beiträge seit 2009
vor 12 Jahren

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!"

107 Beiträge seit 2011
vor 12 Jahren

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.

5.742 Beiträge seit 2007
vor 12 Jahren

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.