Für jedes Produkt gibt es zugehörige Kostenrechner wie: Rabatt, Händlerrabatt, Händlerbonus, Monatsrabatt etc. In Zukunft würden weitere Kostenrechner hinzukommen.Preisausstatter
Wir haben eine konkrete Produktklasse und viele Dekoratoren für jede Kostenkalkulation. Alle Produkte sollten alle Rechner verwenden, da die Rechner ihre Berechnungen nach Produkteigenschaften wie Produkt-ID, Kategorie-ID, Farbe usw. vornehmen.
Und es gibt Millionen von Produkten in unserem System, die es sein müssen berechnet. Also, wir speichern besser die dekorierten Rechner. Denn das Verzieren jeder Produkteinheit zur Laufzeit wäre teuer. Aber das ist hart mit Decorator-Muster. Es scheint wie ein Geruch, dieses Muster in unserer Situation zu benutzen.
Was schlagen Sie vor? Sollten wir Dekoratoren, Strategien oder Verantwortungsmuster verwenden? Oder kein Muster.
Dekorierer berechnen basierend auf Produkteigenschaften, wir führen eine Liste von Produkten durch, um diese Berechnungen auf alle Produkte anzuwenden. Daher dachten wir, dass jedes Caching der Berechnungslogik eine gute Idee wäre, jedes dieser Produkte bei jeder Iteration zu dekorieren. Aber das ist schwer mit Dekorateuren zu tun. Ein besserer Ansatz wäre also, das Strategie-Pattern als Set/Get-On-Produkt zu verwenden. Produkt p = neues Produkt(); p.setCalculationStrategy (listOfCalculator); p.price(); // ruft alle Rechner auf, nur die interessierten Rechner berechnen –
p.price() { return listOfCalculators.price(); } listOfCalculators.price() { jeder Rechner tun { // .... } return Preis; } –