我正在尝试理解Java中的策略模式和枚举。我已经在谷歌上搜索了一些相关文章,但其中大部分对我来说过于复杂。是否有人可以提供一个使用Java中的枚举以通俗易懂的方式演示策略模式的简单示例或另一个链接呢?
非常感谢您的帮助。
非常感谢您的帮助。
应该可以这样做:
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;
}
};
}
它是使用枚举(enum)来实现策略模式的维基百科文章的重新实现。
或者更详细地说,它是一个策略模式:
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;
}
interface
将整体曝光降至最低,这通常是一个好主意。另一种选择是暴露整个Enum
,这将允许用户采取自由,当然,他们会这样做。 - OldCurmudgeon