读书人

应用枚举实现一个状态机

发布时间: 2012-09-09 09:27:54 作者: rapoo

使用枚举实现一个状态机
非常巧妙的一个使用枚举的例子.原文见这里

interface Context {    ByteBuffer buffer();    State state();    void state(State state);}interface State {    /**       * @return true to keep processing, false to read more data.     */    boolean process(Context context);}enum States implements State {    XML {        public boolean process(Context context) {            if (context.buffer().remaining() < 16) return false;            // read header            if(headerComplete)                context.state(States.ROOT);            return true;        }    }, ROOT {        public boolean process(Context context) {            if (context.buffer().remaining() < 8) return false;            // read root tag            if(rootComplete)                context.state(States.IN_ROOT);            return true;        }    }}public void process(Context context) {    socket.read(context.buffer());    while(context.state().process(context));}

读书人网 >编程

热点推荐