这应该做:
interface Strategy {
int execute(int a, int b);
}
enum Math implements Strategy {
Add {
@Override
public int execute(int a, int b) {
return a + b;
}
},
Subtract {
@Override
public int execute(int a, int b) {
return a - b;
}
},
Multiply {
@Override
public int execute(int a, int b) {
return a * b;
}
};
}
或者更长一点但更明确的策略模式:
public interface FailureStrategy {
void fail (String message);
}
enum Failure implements FailureStrategy {
Ignore {
@Override
public void fail(String message) {
// Do nothing on success.
}
},
LogToConsole {
@Override
public void fail(String message) {
System.out.println(message);
}
},
ErrToConsole {
@Override
public void fail(String message) {
System.err.println(message);
}
},
RingAlarmBells {
@Override
public void fail(String message) {
// Left to the student.
}
},
SoundTheKlaxon {
@Override
public void fail(String message) {
// Left to the student.
}
},
EndTheWorld {
@Override
public void fail(String message) {
// Left to the student.
}
};
}
public class SomethingLethal {
public FailureStrategy onFail = Failure.EndTheWorld;
}
public class SomethingDangerous {
public FailureStrategy onFail = Failure.RingAlarmBells;
}
public class SomethingBenign {
public FailureStrategy onFail = Failure.Ignore;
}