java实现23种设计模式之状态模式

状态模式(State Pattern)中,类的行为是基于它的状态改变的。

例如QQ的隐藏在线功能。使用场景可用于

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

通常命令模式的接口中只有一个方法。而状态模式的接口中有一个或者多个方法。

而且,状态模式的实现类的方法,一般返回值,或者是改变实例变量的值。

也就是说,状态模式一般和对象的状态有关。实现类的方法有不同的功能,覆盖接口中的方法。状态模式和命令模式一样,也可以用于消除 if...else 等条件选择语句。

package com.ceshi19;

public class State {
     private String value;
        
    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

    public void hide(){
        System.out.println("我是隐藏的!");
    }
    
    public void online(){
        System.out.println("我是在线的!");
    }
}
package com.ceshi19;

public class Context {

    private State state;

    public Context(State state) {
        this.state = state;
    }

    public State getState() {
        return state;
    }

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

    public void method() {
        if (state.getValue().equals("hide")) {
            state.hide();
        } else if (state.getValue().equals("online")) {
            state.online();
        }
    }
}
package com.ceshi19;

public class Test {

    public static void main(String[] args) {
        
        State state = new State();
        Context context = new Context(state);
        
        //设置第一种状态
        state.setValue("hide");
        context.method();
        
        //设置第二种状态
        state.setValue("online");
        context.method();
    }
}

做网站的时候,我们有时希望根据对象的某一属性,区别开他们的一些功能,比如说简单的权限控制等

原文地址:https://www.cnblogs.com/zhengyuanyuan/p/10756790.html