1

状态模式在解析字符串时很有用。状态意味着工作的一部分,就像方法一样。当您从字符串中解析一些单词时,您会将状态更改为新的

这是什么意思?我真的很困惑。

我有一个格式为“OPERATOR OBJECT [FILTER] [VALUES]”的字符串,并且在解析查询时应该使用状态模式。有四种状态:OPERATOR、OBJECT、FILTER 和 VALUES"

4

1 回答 1

2

我认为您引用的作者可能指的是自动机理论的接受者,它使用不同的状态来存储当前的匹配进度。为了说明这一点,我将举一个例子。但是,状态不像方法,而是以不同的方式实现相同的方法。

/** Accepts strings which contain SO */
class Acceptor {

    private enum State {
        NOTHING_YET {
            @Override
            State nextState( char c ) {
                if(c == 'S') {
                    return FOUND_S;
                } else {
                    return NOTHING_YET;
                }
            }
        },
        FOUND_S {
            @Override
            State nextState( char c ) {
                if(c == 'O') {
                    return FOUND_SO;
                } else if(c == 'S') {
                    return FOUND_S;
                } else {
                    return NOTHING_YET;
                }
            }
        },
        FOUND_SO {
            @Override
            State nextState( char c ) {
                return FOUND_SO;
            }
        };

        abstract State nextState( char c );
    }


    boolean accept( String word ) {
        State current = State.NOTHING_YET;
        for(char c : word.toCharArray()) {
            current = current.nextState( c );
        }
        return current == State.FOUND_SO;
    }

}
于 2012-05-07T10:33:53.710 回答