使用枚举的策略模式.在Java中需要一个简单的例子
作者:互联网
参见英文答案 > Where is the benefit in using the Strategy Pattern? 8个
我正在尝试理解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;
}
};
}
它是使用枚举来重新实现Wikipedia article的策略.
或者更长一点但更明确的策略模式:
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;
}
标签:strategy-pattern,java,enums,design-patterns,java-ee 来源: https://codeday.me/bug/20191006/1863141.html