设计模式——状态模式

状态模式(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("老年");
        
    }

}

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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 目录 本文的结构如下: 引言 什么是状态模式 模式的结构 典型代码 代码示例 状态模式和策略模式的区别 优点和缺点...
    w1992wishes阅读 4,140评论 0 6
  • 今天我们来学习一种行为型模式,状态模式(State Pattern)。 模式定义 允许一个对象在其内部状态改变时改...
    HJXANDHMR阅读 9,974评论 5 12
  • 状态模式及其结构 状态模式(State):当一个对象的内部状态发生改变时,会导致其行为的改变,对象看起来似乎修改了...
    CodePanda_Li阅读 4,705评论 0 4
  • 在阎宏博士的《JAVA与模式》一书中开头是这样描述状态(State)模式的:状态模式,又称状态对象模式(Patte...
    Ant_way阅读 3,017评论 0 0
  • 状态模式:允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。对象行为型模式 又名状态对象(O...
    沉麟阅读 4,816评论 0 1

友情链接更多精彩内容