使用枚举的策略模式.在Java中需要一个简单的例子

Hor*_*ice 3 java enums design-patterns strategy-pattern java-ee

我正在尝试理解java中的策略模式和枚举.我用谷歌搜索了这篇文章并找到了一些关于这个主题的文章,但是大多数文章看起来都太复杂了.任何人都可以提供一个简单的示例或其他链接,使用java在外行术语中使用枚举来演示策略模式吗?

提前谢谢你.

Old*_*eon 15

这应该做:

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;
                }
            };
}
Run Code Online (Sandbox Code Playgroud)

这是一个重新实现的维基百科的文章使用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;
}
Run Code Online (Sandbox Code Playgroud)

  • @Puce - 我的IDE知道它是一个常量,并为我提醒我提醒我.我不需要破坏我的代码来支持古老和恕我直言的错误命名约定.聪明人理解教条和口头禅之间的区别.:)我不会为了遵守编码标准而在我的代码中大喊大叫. (3认同)
  • @Puce - 我从不让教条妨碍可读性.:) (2认同)