使用变量栈

1.变量栈

    变量上下文(ActionContext)也是一个栈,使用栈可以实现局部变量、全局变量和传递参数等功能,由于变量上下文的栈操作是完全开放的,因此可以在动作中使用。

2.push和pop必须成对出现

    变量上下文的栈操作必须要谨慎,最低要求是push和pop必须成对出现,并且用try{}finally{},pop操作在finally中。

Bindings bindings = actionContext.push();
try{
     .......
}finally{
     actionContext.pop();
}

3.示例

    对变量上下文的栈操作其实是比较少见的,一般在框架里用的比较多,比如SWT界面模型框架,模型的主要功能是实现create方法,通过create方法创建SWT的Java对象。

    另外一个界面是由各种控件组成的,而控件之间存在包含关系(父子关系),因此在SWT的API中一个控件通常需要传入parent(父)控件,如Button的构造函数。

Button(Composite parent, int style) 

    这样在SWT的模型框架里,就可以使用栈来传入parent变量。

//构造SWT对象
Button button = new Button(parent, SWT.NONE);

//执行Button的子模型
Bindings bindings = actionContext.push();
try{
    bindings.put("parent", button);
    for(Thing child : self.getChilds()){
        child.doAction("create", actionContext);
    }
}finally{
    actionContext.pop();
}

    使用以上方法可以解决任意控件模型的嵌套情况。

 

Copyright ©  2007-2019 XWorker.org  版权所有  沪ICP备08000575号