首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数值耦合

数值耦合
EN

Stack Overflow用户
提问于 2013-12-06 16:13:58
回答 1查看 505关注 0票数 2

我遇到了一些作为枚举编写的状态机的示例。例如:

代码语言:javascript
复制
public enum State {
    INITIAL {
        @Override
        public State process(char ch) { return MIDDLE; }
    },

    MIDDLE {
        @Override
        public State process(char ch) {
            switch (ch) {
                case 'a': return INITIAL;
                default: return FINAL;
            }
        }
    },

    FINAL {
        @Override
        public State process(char ch) { return FINAL; }
    };

    public abstract State process(char ch);

    public static State initial() { return INITIAL; }
}

我关心的是让常量相互了解。它们的实现可能会发生更改,如果添加(或删除)常量,则会隐含更多的更改。

但是,所有更改都包含在枚举中,除非外部代码直接引用常量并对转换表作出假设。

那么,这个代码是高度耦合的,松散耦合的,还是主观的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-06 17:00:38

我想说,对于一个灵活的工具来说,这是过于紧密的耦合。

更宽松的东西会灵活得多:

代码语言:javascript
复制
public enum State {
  INITIAL,
  MIDDLE,
  FINAL;
  public static State initial() {
    return INITIAL;
  }

}

// A 'null' for the Character matches anything.
static Map<Pair<State,Character>, State> machine = new HashMap<>();
static {
  // Always transit from INITIAL to MIDDLE
  machine.put(new Pair<State,Character>(State.INITIAL,null), State.MIDDLE);
  // An 'a' transitrs us to FINAL
  machine.put(new Pair<State,Character>(State.MIDDLE,'a'), State.FINAL);
  // Anything else takes us back to INITIAL
  machine.put(new Pair<State,Character>(State.MIDDLE,null), State.FINAL);
  // Stay in FINAL once there.
  machine.put(new Pair<State,Character>(State.FINAL,null), State.FINAL);

}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20428558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档