设计模式——状态模式

状态模式(State Pattern) :允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。其别名为状态对象(Objects for States),状态模式是一种对象行为型模式。

状态模式.jpg

Context: 场景类,维护一个状态(State)
State:抽象状态类
ConcreteState: 具体状态类

示例:模拟一个人青年、中年、老年的不同状态

/**
 * 
 * @author apple
 *
 * 环境类
 *
 */
public class Context {
    private IState state;

    public void setState(IState state) {
        this.state = state;
    }
    
    public void request(String sampleParameter) {
        this.state.handle(sampleParameter);
    }
}
/**
 * @author apple
 * 
 * 状态类
 *
 */
public interface IState {
    /*
     * 状态对应的处理
     */
    public void handle(String sampleParameter);
}

public class ConcreteStateA implements IState {

    @Override
    public void handle(String sampleParameter) {
        // TODO Auto-generated method stub
        if (sampleParameter == "青年") {
            System.out.println("青年的状态:读书学习耍盆友");    
        }
    }
    
}
public class ConcreteStateB implements IState {

    @Override
    public void handle(String sampleParameter) {
        // TODO Auto-generated method stub
        if (sampleParameter == "中年") {
            System.out.println("中年的状态:加班加班加班"); 
        }
    }
    
}

public class Client {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //  一个类内部发生变化,变现不同状态
        //  一个人不同阶段,做不同的事  ,青年 上学 ,中年 上班, 老年: 打麻将
        
        Context context = new Context();
        
        // 青年时候
        ConcreteStateA a = new ConcreteStateA();
        context.setState(a);
        context.request("青年");
        // 中年时候
        ConcreteStateB b = new ConcreteStateB();
        context.setState(b);
        context.request("中年");
        // 老年时候
        ConcreteStateC c = new ConcreteStateC();
        context.setState(c);
        context.request("老年");
        
    }

}

应用场景:一个模型内部有多个不同状态

你可能感兴趣的:(设计模式——状态模式)