使用枚举的策略模式。 Java中需要一个简单的例子 [英] Strategy pattern using Enums. Need a simple example in Java

查看:798
本文介绍了使用枚举的策略模式。 Java中需要一个简单的例子的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试了解java中的策略模式和枚举。我已经google了这个,并且发现了一些关于这个问题的文章,但是大多数文章似乎太复杂了,因为我的理解。任何人都可以提供一个简单的示例或其他链接,使用java显示使用枚举术语的策略模式?



感谢您提前。

解决方案

应该这样做:

 界面策略{

int execute(int a,int b);
}

枚举数学实现策略{

添加{

@Override
public int execute(int a,int b){
return a + b;
}
},
减去{

@Override
public int execute(int a,int b){
return a - b ;
}
},
乘以{

@Override
public int execute(int a,int b){
return a * b ;
}
};
}

这是一个重新实现的维基百科文章使用枚举的策略。



或稍长一点,但更明确的策略模式:

  public interface FailureStrategy {
void fail(String message );
}

枚举失败实施FailureStrategy {
忽略{

@Override
public void fail(String message){
//成功完成任务
}

},
LogToConsole {

@Override
public void fail(String message){
System.out .println(消息);
}

},
ErrToConsole {

@Override
public void fail(String message){
System.err .println(消息);
}

},
RingAlarmBells {

@Override
public void fail(String message){
// Left给学生
}

},
SoundTheKlaxon {

@Override
public void fail(String message){
// Left给学生
}

},
EndTheWorld {

@Override
public void fail(String message){
// Left给学生
}

};
}

public class SomethingLethal {
public FailureStrategy onFail = Failure.EndTheWorld;
}

public class SomethingDangerous {
public FailureStrategy onFail = Failure.RingAlarmBells;
}

public class SomethingBenign {
public FailureStrategy onFail = Failure.Ignore;
}


I'm trying to understand the strategy pattern and enums in java. I've googled this and have found a few articles on the subject, but most of them seemed too complex for my understanding. Could anyone provide a simple example or another link that demonstrates strategy pattern using enums in laymen terms using java?

Thanks you in advance.

解决方案

This should do:

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;
                }
            };
}

It is a re-implementation of the Wikipedia article using enum for the strategies.

Or a little longer but more clearly a strategy pattern:

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;
}

这篇关于使用枚举的策略模式。 Java中需要一个简单的例子的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆