WEB开发网
开发学院软件开发Java 演化架构和紧急设计: 使用 DSL 阅读

演化架构和紧急设计: 使用 DSL

 2010-07-27 00:00:00 来源:WEB开发网   
核心提示: H. 夫人想要一个暗格,打开这个暗格的方法是:首先关闭卧室门,演化架构和紧急设计: 使用 DSL(2),接着打开梳妆台的第二个抽屉,最后打开床头灯,创建一个抽象事件类,可以同时处理状态机内的事件和命令,这些活动必须依次进行,如果打乱次序

H. 夫人想要一个暗格,打开这个暗格的方法是:首先关闭卧室门,接着打开梳妆台的第二个抽屉,最后打开床头灯。这些活动必须依次进行,如果打乱次序,必须重头开始。您可以将控制暗格的软件想象为一个状态机,如图 1 所示:

图 1. H. 夫人的暗格是状态机
演化架构和紧急设计: 使用 DSL

基本状态机 API 比较简单。创建一个抽象事件类,可以同时处理状态机内的事件和命令,如清单 1 所示:

清单 1. 状态机的抽象事件

 public class AbstractEvent { 
 private String name, code; 
 
 public AbstractEvent(String name, String code) { 
  this.name = name; 
  this.code = code; 
 } 
 public String getCode() { return code;} 
 public String getName() { return name;}  

可以使用另一个简单类 States对状态机中的状态建模,如清单 2 所示 :

清单 2. 状态机类的开始部分

 public class States { 
 private State content; 
 private List<TransitionBuilder> transitions = new ArrayList<TransitionBuilder>(); 
 private List<Commands> commands = new ArrayList<Commands>(); 
 
 public States(String name, StateMachineBuilder builder) { 
  super(name, builder); 
  content = new State(name); 
 } 
 
 State getState() { 
  return content; 
 } 
 
 public States actions(Commands... identifiers) { 
  builder.definingState(this); 
  commands.addAll(Arrays.asList(identifiers)); 
  return this; 
 } 
 
 
 public TransitionBuilder transition(Events identifier) { 
  builder.definingState(this); 
  return new TransitionBuilder(this, identifier); 
 } 
 
 void addTransition(TransitionBuilder arg) { 
  transitions.add(arg); 
 } 
 
 
 void produce() { 
  for (Commands c : commands) 
   content.addAction(c.getCommand()); 
  for (TransitionBuilder t : transitions) 
   t.produce(); 
 } 
 } 

上一页  1 2 3 4 5 6 7  下一页

Tags:演化 架构 紧急

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接