Ich habe drei Sensoren in einem einzigen Paket, die alle kalibriert werden müssen und die ich sens1, sens2 und sens3 nennen werde. Die Kalibrierung für sens1 und sens2 ist identisch, für die Kalibrierung für sens3 ist jedoch ein zusätzlicher Parameter erforderlich. Meine Frage lautet: "Was ist der beste Weg, um mit drei nahezu identischen Objekten umzugehen und gleichzeitig die Lesbarkeit zu gewährleisten?"
Mein erster Gedanke war natürlich, Polymorphismus zu verwenden. Ich würde ein generisches Sensorobjekt mit einer .calibrate-Methode (Parameters params) einrichten, bei der ich mit der Parameters-Klasse die Anzahl der Parameter basierend auf der von mir durchgeführten Kalibrierung variieren kann. Dies führt jedoch zu Folgendem:
Sensor sens1 = new Sensor();
Sensor sens2 = new Sensor();
Sensor3 sens3 = new Sensor3();
Damit zukünftige Leute wissen müssen, dass sich ein Sensor grundlegend von den beiden anderen unterscheidet, aber sehr, sehr ähnlich ist, scheint es mir das Beste zu sein, Sens1 und Sens2 nur im Namen zu unterordnen. Mit anderen Worten, erstellen Sie zwei Unterklassen, die kein Verhalten ändern oder erweitern, um logischere Klassennamen zu erhalten. Denken Sie daran, dass sich alle drei Sensoren im selben Paket befinden, sodass diese Daten sehr oft zusammenpassen. Dies ändert den obigen Code in:
Sensor1 sens1 = new Sensor1();
Sensor2 sens2 = new Sensor2();
Sensor3 sens3 = new Sensor3();
wo
Sensor1 extends Sensor {
}
Sensor2 extends Sensor {
}
Sensor3 extends Sensor {
@Override
calibrated(Parameters params) {
\\ Code
}
}
Bin ich verrückt danach zu denken, dass dies eine gute Idee ist? Gibt es ein saubereres Muster, das mir hier völlig fehlt?
quelle
Ich bin mir nicht sicher, ob die Kalibrierung in der Verantwortung des Sensors liegen sollte ... Ich würde in Betracht ziehen, zwei neue Klassen zu erstellen. So etwas wie SensorCalibratorBase, SensorCalibratorAdavanced. Dann würde ich eine bestimmte Instanz des Kalibrators basierend auf dem App-Status erstellen und die Sensorinstanz ihrer Kalibrierungsfunktion zuführen. Jeder Kalibrator würde die benötigten Parameter als Konstruktorargumente erhalten.
quelle