1700473723
1700473724
状态模式相对来说比较复杂,它提供了一种对物质运动的另一个观察视角,通过状态变更促使行为的变化,就类似水的状态变更一样,一碗水的初始状态是液态,通过加热转变为气态,状态的改变同时也引起体积的扩大,然后就产生了一个新的行为:鸣笛或顶起壶盖,瓦特就是这么发明蒸汽机的。我们再来看看状态模式的通用源代码,首先来看抽象环境角色,如代码清单26-14所示。
1700473725
1700473726
代码清单26-14 抽象环境角色
1700473727
1700473728
public abstract class State{
1700473729
1700473730
//定义一个环境角色,提供子类访问
1700473731
1700473732
protected Context context;
1700473733
1700473734
//设置环境角色
1700473735
1700473736
public void setContext(Context_context){
1700473737
1700473738
this.context=_context;
1700473739
1700473740
}
1700473741
1700473742
//行为1
1700473743
1700473744
public abstract void handle1();
1700473745
1700473746
//行为2
1700473747
1700473748
public abstract void handle2();
1700473749
1700473750
}
1700473751
1700473752
抽象环境中声明一个环境角色,提供各个状态类自行访问,并且提供所有状态的抽象行为,由各个实现类实现。具体环境角色如代码清单26-15所示。
1700473753
1700473754
代码清单26-15 环境角色
1700473755
1700473756
public class ConcreteState1 extends State{
1700473757
1700473758
@Override
1700473759
1700473760
public void handle1(){
1700473761
1700473762
//本状态下必须处理的逻辑
1700473763
1700473764
}
1700473765
1700473766
@Override
1700473767
1700473768
public void handle2(){
1700473769
1700473770
//设置当前状态为stat2
1700473771
1700473772
super.context.setCurrentState(Context.STATE2);
[
上一页 ]
[ :1.700473723e+09 ]
[
下一页 ]