小编Ahm*_*mad的帖子

使用Spring DI的状态模式

因为我是春天的新手,所以我在使用普通java转换我的状态模式时遇到了问题.

实际上我使用状态模式创建了一个项目,但我采用的方法是每个状态都知道连续状态而不是上下文类.

上下文类有一个字段"currentState",它的类型是IState,它有方法setState(IState状态).

IState有一个方法geNext(Context context).

在上下文类中我做了一段时间(keepOn),keepOn为true,在ExitState中它变为false以停止处理,在这个循环中我调用currentState.goNext().

每个状态都会进行一些数据库事务和web服务调用,并根据结果使用context.setState(new StateFour())来设置下一个状态 - 例如 - .

第一个状态由客户端在创建上下文后设置.

代码示例:

public interface IState{public void goNext(Context context);}

public class StateOne implements IState{
      public void goNext(Context context){
          //do some logic
          if(user.getTitle.equals("manager"){context.setState(new StateThree());}
          else if(user.getTitle.equals("teamLead"){context.setState(new StateTwo());}
          else{context.setState(new ExitState());}
      }
}

public class Context{
   private boolean keepOn = true;
   private IState currentState;
   public void setState(IState state){
      currentState = state; 
   }
   while(keepOn){currentState.goNext(this);}
}
Run Code Online (Sandbox Code Playgroud)

现在我正在尝试使用基于Spring DI注释的问题,我面临的问题是上下文将使用@Autowired注释"currentState字段"但是如果我处于状态1并且"如果我处于"状态,我需要弹簧容器执行相同的逻辑声明"成功注入状态三"否则如果"注入状态二,否则注入exitState.

如果我使用@Qualifier(value ="stateOne"),它将只指定实现接口的第一个状态,但是我根据情况设置的其他状态我不知道如何在spring中指定它.

另外org.springframework.core.Ordered需要事先指定bean的顺序,但我不知道我将提前从数据库或webservice接收的值,它应该在运行时指定.

那么有可能用spring DI替换这个普通的java以及如何?

提前感谢您的任何帮助,并抱歉延长.

java spring

5
推荐指数
1
解决办法
1219
查看次数

在haskell中构造二进制数

我是Haskell编程语言的新手,我正在尝试创建一个数据类型来表示二进制数,并编写一个函数来计算其十进制值.

我想用二进制数字代表这个BNF

Numeral ::= 0 | 1 | Numeral 0 | Numeral 1

我使用模式匹配和像这样的字段标签在haskell中构建了它的数据类型

data Numeral = Zero | One | Num {number :: Numeral, suffex :: Int}

我创建了一个函数

    valuate Zero = 0
    valuate One  = 1
    valuate Num(n:0) = 2 * valuate (n)
    valuate Num(n:1) = 2 * valuate (n) + 1
    valuate Num(n:ns) = error "Not binary number"
Run Code Online (Sandbox Code Playgroud)

但我得到一个编译错误"'估计'的例外'有不同数量的参数"

我试图理解我所犯的错误在哪里,我将Numeral传递给具有不同构造值的每个模式中的方法,甚至在我调用时(2*评估n)我传递的是"n",这是构造中的Numberal'民"

我的数据类型或函数模式中的问题是什么?

haskell pattern-matching

0
推荐指数
1
解决办法
205
查看次数

标签 统计

haskell ×1

java ×1

pattern-matching ×1

spring ×1