###定数固有メソッド実装をもつenum型
public enum Operation{
PLUS{double calc(double x, double y){return x + y;}},
MINUS{double calc(double x, double y){return x - y;}},
TIMES{double calc(double x, double y){return x * y;}},
DIVIDE{double calc(double x, double y){return x / y;}}
abstract double calc(double x, double y);
}
###戦略enumパターン
OperationにPLUS{double ~}として処理を記述しているが、
戦略enumに処理を委譲する事もできる。
機能と実装を分離してみる。
public enum Operation{
PLUS(Strategy.PLUS),
private Strategy strategy;
Operation(Strategy strategy){ this.strategy = strategy;}
double calc(double x , double y){
return strategy.calc(x,y);
}
}
public enum Strategy{
PLUS{double calc(double x, double y){return x + y}},
abstract double calc(double x, double y);
}