一个带有enum的java方法类
我有一个看起来像的枚举
public enum MyEnum { myValue { @Override public String myMethod(String dostuff) { return dostuff + "One"; } },myOtherValue { @Override public String myMethod(String dostuff) { return dostuff + "Two"; } },aThirdValue { @Override public String myMethod(String dostuff) { return dostuff + "Three"; } }; public abstract String myMethod(String dostuff); } 现在我想我们都同意这看起来很糟糕? 那么,最后的路是什么?必须有一个模式,但似乎找不到一个. 解决方法
这很丑陋,但解决这个问题的非平凡扩展的大多数解决方案只会让丑陋的事情发生变化.
例如,您可以将三种不同的行为封装在某个接口的三个不同实现中,然后将不同的行为实现传递给每个枚举的构造函数. (这基本上是其他人建议的命令或战略方法). 如果您进行这些实现,并且接口是单独的类,那么您可能会将该行为暴露在枚举之外,这是不必要的并且可以说是丑陋的. 如果你将它们作为枚举的私有静态内部类,你就会将丑陋从文件顶部移动到文件的底部.在旁观者的眼中,这是多么少丑陋. public enum Foo { ONE(new OneDelegate()),TWO(new TwoDelegate()),THREE(new ThreeDelegate()); // //////////////////// // Private stuff private final FooDelegate delegate; private Foo(FooDelegate delegate) { this.delegate = delegate; } // //////////////////// // Public methods public String doStuff(String stuff) { return delegate.doStuff(stuff); } // //////////////////// // Helper classes private static interface FooDelegate { String doStuff(String stuff); } private static class OneDelegate implements FooDelegate { @Override public String doStuff(String stuff) { return "One " + stuff; } } private static class TwoDelegate implements FooDelegate { @Override public String doStuff(String stuff) { return "Two " + stuff; } } private static class ThreeDelegate implements FooDelegate { @Override public String doStuff(String stuff) { return "Three " + stuff; } } } 另一个明显的解决方案是将所有三种行为放在私有方法中,并在公共方法中放置一个开关(this).就我个人而言,我认为这是罪恶,但很多前C程序员似乎都喜欢它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |