Ich arbeite an einem Projekt, das drei bestimmte Tickettypen mit bestimmten Eigenschaften benötigt.In Java können Sie Getter und Setter in einer parametrisierten Weise verwenden, d. H. Einen Code übergeben, um zu entscheiden, welche Klassenvariable
Einige dieser Eigenschaften sind endgültig und statisch, da sie sich nicht ändern sollten, jedoch könnten weitere Typen erforderlich sein. Dies würde Änderungen an der abstrakten Klasse bedeuten, aber nicht an der Klasse, die sie implementiert. Ich habe eine abstrakte Klasse erstellt, die diese Klassenvariablen enthält, um die Logik zu begrenzen, die ich schreiben muss, um die Werte zu implementieren. Ich habe Getter-Methoden geschrieben, die einen Parameter (einen Tickettyp-Code) erhalten, und dann schaltet die Methode den Code um und gibt den entsprechenden Wert zurück. In den Setter-Methoden erhalte ich einen Code-Parameter und aktualisiere dann die Klassenvariable abhängig vom empfangenen Code.
Meine Fragen sind:
1.Is diese schlechte Praxis, wenn so sollte ich das Design meiner Klasse revidieren? 2. Und wenn ja, wie sollte ich das Problem so angehen, dass ich den Code wiederverwendbar und parametergesteuert machen kann?
Früher hätte ich eine XML- oder Parameterdatei erstellt, so dass ich die Parameterdatei ändern konnte, anstatt Codeänderungen vorzunehmen, aber ich habe seit ein paar Jahren nicht in Java programmiert und lerne immer noch die Best Practices.
ist hier ein Code-Schnipsel.
private static final int iPickThreeLimit = 50;
private static final int iPickFourLimit = 40;
private static final int iPickFiveLimit = 60;
private static int iPickThreeCount = 50;
private static int iPickFourCount = 40;
private static int iPickFiveCount = 60;
protected static void setTicketCount(String sTicketType) {
switch (sTicketType) {
case "PickThree":
AbstractLotteryMachine.iPickThreeCount = iPickThreeCount--;
break;
case "PickFour":
AbstractLotteryMachine.iPickFourCount = iPickFourCount--;
break;
case "PickFive":
AbstractLotteryMachine.iPickFiveCount = iPickFiveCount--;
break;
} //end switch
} // end setTicketCount
protected static int getPickLimit(String sTicketType) {
int iTicketLimit = 0;
switch (sTicketType) {
case "PickThree":
iTicketLimit = iPickThreeLimit;
break;
case "PickFour":
iTicketLimit = iPickFourLimit;
break;
case "PickFive":
iTicketLimit = iPickFiveLimit;
break;
} //end switch
return iTicketLimit;
} //end getPickLimit
Wenn ich in ein individuelles Getter und Setter-Methode für jeden Kartentyp dieser Ballons die Logik erforderlich in der Klasse I diese abstrakte Klasse bin die Umsetzung habe schreiben
warum nicht eine unveränderliche Klasse verwenden, mit statischen Factory-Methoden für jeden Typ? –
Ein Schalter wie dieser ist meistens eine schlechte Idee. Sie verwenden Polymorphie, damit jede spezifische Unterklasse entscheidet, was passieren soll. Also überschreiben Sie Methoden, anstatt einen typbasierten Switch in der Basisklasse auszuführen. – GhostCat
@GhostCat In diesem Fall funktionieren Override-Methoden nicht, weil die Signatur identisch ist? –