Make Arithmetic
generic:
public interface Arithmetic<T> {
T sum(T o);
}
dann Matrix
Arithmetic<Matrix>
machen implementieren:
@Override public Matrix sum(Matrix o){
dann können Sie die Matrixeigenschaften von o
zugreifen.
Beachten Sie, dass Sie den Entwurfsreiniger finden könnten, wenn Sie Ihre Operationen in eine separate Klasse verschieben, z.
class MatrixArithmetic {
static Matrix sum(Matrix a, Matrix b) {...} // Element-wise addition of matrices.
static Matrix sum(Matrix a, int constant) {...} // Add constant to all elements
}
Ich würde sagen, das ist ein besseres Design, weil:
- Es die arithmetischen Implementierungen von der Implementierung der Datenstruktur declutters;
- Es ermöglicht Ihnen, verschiedene
sum
Methoden zu haben; implements Arithmetic<Matrix>
schließt implements Arithmetic<Integer>
aus (nur als Beispiel);
- Sie können "neue" arithmetische Methoden hinzufügen, die Sie aus bestimmten Gründen benötigen, ohne die Klasse
Arithmetic
ändern zu müssen, um eine bessere Modularisierung Ihrer Algorithmen zu ermöglichen.