Java状态模式

x33g5p2x  于2021-09-25 转载在 Java  
字(1.8k)|赞(0)|评价(0)|浏览(249)

Java状态模式

什么是状态模式?

就是行为随着状态的改变而改变 ,比如: 我今天心情好,我去跑步,今天心情不好我在家睡觉

何时使用: 代码中包含大量与对象状态有关的条件语句。

应用实例: 1、打篮球的时候运动员可以有正常状态、不正常状态和超常状态。

优点: 1 、将所有与某个状态有关的行为放到一个类中,并且可以方便地增加新的状态,只需要改变对象状态即可改变对象的行为。2 、允许状态转换逻辑与状态对象合成一体,而不是某一个巨大的条件语句块。3 、可以让多个环境对象共享一个状态对象,从而减少系统中对象的个数。

缺点: 1、状态模式的使用必然会增加系统类和对象的个数。 2、状态模式的结构与实现都较为复杂,如果使用不当将导致程序结构和代码的混乱。 3、状态模式对"开闭原则"的支持并不太好,对于可以切换状态的状态模式,增加新的状态类需要修改那些负责状态转换的源代码,否则无法切换到新增状态,而且修改某个状态类的行为也需修改对应类的源代码。

使用场景: 1、行为随状态改变而改变的场景。 2、条件、分支语句的代替者。

我们之前是怎么控制状态的,使用枚举或者 if() , switch()

public void state(int state){

        switch (state){
            case 1:
                System.out.println("我是开启状态");
                break;
            case 2:
                System.out.println("我是关闭状态");
                break;
        }
    }

    @Test
    public void testState(){
        state(1);
    }

如果状态代码 量特别大的话 就不推荐使用了 因为一个方法中不建议写太多的代码 而且扩展性也不行 这样的效率也不是最好的

这时候我们可以将这些状态封装在各自的类中 通过改变状态从而改变行为

状态接口

public interface State {
    public void doAction(Context context);
}

状态类

//启动状态
public class StartState implements State {

    public void doAction(Context context) {
        //改变 context 里的 state状态 为StartState
        context.setState(this);
    }

    public String toString(){
        return "启动 State";
    }
}

状态类

//停止状态
public class StopState implements State {

    public void doAction(Context context) {
        //改变 context 里的 state状态 为StopState
        context.setState(this);
    }

    public String toString(){
        return "停止 State";
    }
}

行为类

public class Context {
    private State state;

    public Context (){
        state = null;
    }

    public void setState(State state){
        this.state = state;
    }

    public State getState(){
        return state;
    }
}

测试

public class StatePatternDemo {
    public static void main(String[] args) {
        Context context = new Context(); //行为

        StartState startState = new StartState();//启动状态
  		//改变行为的状态
        startState.doAction(context);
        //此刻行为的状态就是 启动状态
        System.out.println(context.getState().toString());

        StopState stopState = new StopState();//停止状态
        //改变行为的状态
        stopState.doAction(context);
        //此刻行为的状态就是 停止状态
        System.out.println(context.getState().toString());
    }

    
}

启动 State
停止 State
点赞 -收藏-关注-便于以后复习和收到最新内容有其他问题在评论区讨论-或者私信我-收到会在第一时间回复如有侵权,请私信联系我感谢,配合,希望我的努力对你有帮助^_^

相关文章

微信公众号

最新文章

更多