I need to use a matrix class in my application for operations like Eigenvalue decomposition,LUDecomposition as well as normal matrix ops like multiplication,addition ,transposition etc. I decided to use jama at present since I am quite familiar with it and because I am currently working with small datasets.
But probably later, I would want to move to a better matrix library like ejml or some future invention as the amount of data grows. How should I design my matrix class so that it is not bound to a particular implementation? I would like an interface similar to as below.
class MyMatrix{
public MyMatrix addWithAnother(MyMatrix b){
...
}
public MyMatrix multiplyWithAnother(MyMatrix b){
...
}
public double[][] getData(){
..
}
public SomeEigenDecomposition getEigenValueDecomposition(){
...
}
Should I put the implementation matrix class(jama Matrix or such) as a field and delegate calls to it? Still that would bind me to jama ,I think.
How can I make the above totally free from the implementation?Any design pattern,java gurus please advise.
thanks
mark