In my project I need to create objects for each kind of Java Math Operator like "Add", "Substraction", "Multiplication", etc. And these operators should be singletons.
So here is what I am going to do. I define the Math Operator as an interface and I put those implementations inside it as I don't want to define singleton classes for each operator.
public interface MathOperator {
double operate(double a, double b);
MathOperator ADD = new MathOperator(){
@Override
public double operate(double a, double b) {
return a + b;
}
};
MathOperator SUBSTRACT = new MathOperator(){
@Override
public double operate(double a, double b) {
return a - b;
}
};
}
I don't see much of such usage when I Google this. So I wonder if this is a good practice and if there are better and more graceful approaches?
I would do smt like
1) Define interface
interface MathOperator {
double operate(double a, double b);
}
2) Than have some common implementation in enum (less code)
enum MathOperators implements MathOperator {
ADD {
@Override
public double operate(double a, double b) {
return a + b;
}
},
SUBTRACT {
@Override
public double operate(double a, double b) {
return a - b;
}
}
}
3) Or public static members (more clean solution).
class MathOperators {
public static MathOperator ADD = new MathOperator() {
@Override
public double operate(double a, double b) {
return a + b;
}
};
public static MathOperator SUBTRACT = new MathOperator() {
@Override
public double operate(double a, double b) {
return a - b;
}
};
}
MathOperator
without changing MathOperators
One idiom that I've seen used in precisely these circumstances is the use of enum
:
public enum MathOperator {
ADD {
@Override
public double operate(double a, double b) {
return a + b;
}
},
SUBTRACT {
@Override
public double operate(double a, double b) {
return a - b;
}
};
public abstract double operate(double a, double b);
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With