Board logo

标题: State模式在客户端软件中的应用(2)客户端应用更新 [打印本页]

作者: look_wt    时间: 2018-10-15 18:45     标题: State模式在客户端软件中的应用(2)客户端应用更新

ClientNormalState类:
1
2
3
4
5
6
7
8
9
10
11
12
public class ClientNormalState implements ClientState {
    /**
     * 正常状态下, 各个控件默认为可编辑的, 所以不用做任何更改
     */
    public void setComponents(ClientStateChangeable gui) {}
    /**
     * 正常状态下, 需要将用户所作修改保存到服务端
     */
    public void action(ClientStateChangeable gui) {
        gui.saveChangeToServer();
    }
}




ClientReadOnlyState类:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class ClientReadOnlyState implements ClientState {
    /**
     * 设置GUI的数据控件为Read-Only
     */
public void setComponents(ClientStateChangeable gui) {
        Collection components = gui.getChageableComponents();
        Iterator iter = components.iterator();
        while(iter.hasNext()){
            JComponent jc = (JComponent)iter.next();
            jc.setEnabled(false);           
            String toolTip = jc.getToolTipText();
            String addedTip = "只读状态";
            if(toolTip == null)toolTip = addedTip;
            else toolTip += ". " + addedTip;
            jc.setToolTipText(toolTip);
        }
    }
    /**
     * GUI处于Read-Only状态, 无需将数据保存到server端   
     */
    public void action(ClientStateChangeable gui) {}
}




2.2 类型2:(Reuse GUI)2.2.1 动机
当多个客户端GUI布局、控件类型很相似,所完成的任务也相似时,只需要经过精心设计,将这些GUI的展示形式统一起来,同一个GUI可以用到多个场景中,达到重用的目的。此时,这些不同任务需要操作不同的数据集合。
可以在GUI类中实现这些不同数据集合的操作,但是这会给程序维护带来麻烦。首先,属于不同逻辑的数据操作出现在同一类文件中,造成逻辑混乱、程序规模增大,不易于调试;其次,要将GUI用于新的数据集合时,只能在相同文件中增加新的代码,此时,该程序的可维护性降低,尤其是新的工作由其他程序员完成时,要理解原有代码是很费力的。
和2.1.1节中提到的解决方法类似:将变化的部分和不变部分分离开来,使得变化的部分可以独立修改、扩充。具体地,则是将数据集合相关操作从GUI程序中抽取出来,定义一个所有数据集合操作的接口(即:状态接口),不同地数据集合操作作为该接口的一个实现类存在。这样,每个数据集合都独立的封装于一个状态对象内;而且,要对新的数据使用该GUI,只需要定义新的状态接口实现类即可,无须修改已有类,甚至不关心已有的状态。
2.2.2 适用性
本类型适用环境:不同的数据集合,相同的操作模式。即不变化的客户端GUI,将不同的数据集合操作委托给变化的状态对象去完成。
2.2.3 结构(图3)
图3 不同数据集合,相同操作模式2.2.4 参与者
本类型的实现代码在这里就不列出了,参照2.1.5节中的代码,很容易的就可实现本类型的结构。
2.3 综合以上两种类型可以将以上两种类型结合起来使用,即实现了客户端软件的数据集合方面对GUI的重用,也实现了操作模式方面对GUI的重用。
程序实现时,可以由GUI类分别维护一个ClientState的引用和一个VariableDataState的引用:





欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0