Hallo und guten Morgen an alle.
Ich bin dabei eine Übung zu machen. Ich sollte mich dazu über das Strategier Pattern informieren und habe da auch einiges gelesen. Ich habe es vom Prinzip her auch verstanden. Ich sollte dazu ein UML Diagramm machen, das habe ich auch getan. Eine Grafik dazu findet ihr im Anhang.
Da ich auch das Buch PHP Design Patterns lese habe ein daran angelehntes Beispiel genommen (ich sollte mir selber ein Beispiel dazu aussuchen, mir wurde da keins vorgegeben).
Nun bestand meine Aufgabe auch darin das UML dann in PHP Code umzusetzen, was ich auch versuchte und der Meinung bin bis zum jetztigen Punkt richtig gemacht zu haben.
Ich bin bei der Klasse die das Interface letzendlich benutzen soll und übergebe das Interface da via Type Hinting. Nur jetzt hapert es daran das ich nicht weis wie ich das dann da anwenden soll, so das eben je nach Bedarf ein anderes Verhalten auftritt ohne das mit ein haufen IF Abfragen umzusetzen.
Der Sinn des Strategie Patterns ist das Algorythmen je nach Verhalten austauschen kann ohne die Algorythmen in der Klasse fest zu setzen sondern von der benutzenden Klasse (den benutzenden Klassen) lose zu koppeln bzw. los zu lösen und die Algorythmen auszulagern.
In meinem Beispiel sind zwar keine kompletten Algorythmen sondern nur einfache Werte die aber auf das Gesamtergebnis in der Endrechnung der letzten Klasse Einfluss haben. Ich denke ich habe das soweit umgesetzt das die festen Werte ausgelagert sind. Aber nun weis ich eben nicht wirklich wie ich das nun flexible in der Klasse Mietberechnung einsetzen kann, so das eben je nach bedarf ein anderer Wert in die Rechnung eingenommen wird.
Hier noch der Beispielcode. Es sind alle Klassen und das Interface in einer Datei, ich würde das im Produktiveinsatz niemals so machen, dass ist wie gesagt nur eine Übung.
Könnt ihr mir ein wenig auf die Sprünge helfen? Vielen Dank für eure Hilfe und Antworten.
Mfg der Litter
[EDIT]
Ich arbeite mit StarUml und weiß nicht warum die Methode addTagessatz im Uml beim Interface nicht drin angezeigt wird. Sie ist aber definitiv da.
Ich bin dabei eine Übung zu machen. Ich sollte mich dazu über das Strategier Pattern informieren und habe da auch einiges gelesen. Ich habe es vom Prinzip her auch verstanden. Ich sollte dazu ein UML Diagramm machen, das habe ich auch getan. Eine Grafik dazu findet ihr im Anhang.
Da ich auch das Buch PHP Design Patterns lese habe ein daran angelehntes Beispiel genommen (ich sollte mir selber ein Beispiel dazu aussuchen, mir wurde da keins vorgegeben).
Nun bestand meine Aufgabe auch darin das UML dann in PHP Code umzusetzen, was ich auch versuchte und der Meinung bin bis zum jetztigen Punkt richtig gemacht zu haben.
Ich bin bei der Klasse die das Interface letzendlich benutzen soll und übergebe das Interface da via Type Hinting. Nur jetzt hapert es daran das ich nicht weis wie ich das dann da anwenden soll, so das eben je nach Bedarf ein anderes Verhalten auftritt ohne das mit ein haufen IF Abfragen umzusetzen.
Der Sinn des Strategie Patterns ist das Algorythmen je nach Verhalten austauschen kann ohne die Algorythmen in der Klasse fest zu setzen sondern von der benutzenden Klasse (den benutzenden Klassen) lose zu koppeln bzw. los zu lösen und die Algorythmen auszulagern.
In meinem Beispiel sind zwar keine kompletten Algorythmen sondern nur einfache Werte die aber auf das Gesamtergebnis in der Endrechnung der letzten Klasse Einfluss haben. Ich denke ich habe das soweit umgesetzt das die festen Werte ausgelagert sind. Aber nun weis ich eben nicht wirklich wie ich das nun flexible in der Klasse Mietberechnung einsetzen kann, so das eben je nach bedarf ein anderer Wert in die Rechnung eingenommen wird.
Hier noch der Beispielcode. Es sind alle Klassen und das Interface in einer Datei, ich würde das im Produktiveinsatz niemals so machen, dass ist wie gesagt nur eine Übung.
PHP-Code:
<?php
interface Miettagessatz {
public function addTagessatz();
}
class Ts_Kleinwagen implements Miettagessatz {
protected $tagessatz = 25;
public function addTagessatz () {
return $this->tagessatz;
}
}
class Ts_Mittelklasse implements Miettagessatz {
protected $tagessatz = 45;
public function addTagessatz () {
return $this->tagessatz;
}
}
class Ts_Transporter implements Miettagessatz {
protected $tagessatz = 65;
public function addTagessatz () {
return $this->tagessatz;
}
}
class Ts_Lkw implements Miettagessatz {
protected $tagessatz = 125;
public function addTagessatz () {
return $this->tagessatz;
}
}
class Mietberechnung {
protected $tagessatz;
public function __construct(){}
public function getTagessatz ( Miettagessatz $tagessatzpreis ) {
//hier komme ich nicht weiter hier müsste ich es einsetzen
}
}
?>
Mfg der Litter
[EDIT]
Ich arbeite mit StarUml und weiß nicht warum die Methode addTagessatz im Uml beim Interface nicht drin angezeigt wird. Sie ist aber definitiv da.

Kommentar