Lab3漫谈(1)-状态模式

前言

Lab3中需要使用状态模式来控制一个计划项的运行状态,并且在五个应用中总共有两类状态转换图(状态机)。因为有一些状态是重叠的,因此可以将他们共享,二选一,我采用布尔变量控制,但是状态模式的基本“套路”还是没有变的。

模式结构

状态模式包含以下主要角色。

  • 环境(Context)角色:也称为上下文,它定义了客户感兴趣的接口,维护一个当前状态,并将与状态相关的操作委托给当前状态对象来处理。
  • 抽象状态(State)角色:定义一个接口,用以封装环境对象中的特定状态所对应的行为。
  • 具体状态(Concrete State)角色:实现抽象状态所对应的行为。

可以结合具体代码对照,State实际上被定义为一个抽象类,这个抽象类中应该包括状态机中各种状态的一些共有属性,比如“状态名”。
Concrete State 对应位State的一些具体实现类,来定义状态机中所需要的状态类。
而环境Context,不如说是状态机,前两者提供了这个“机器”的一些零件,但实际的运转却需要将这些零件组合起来。
你也可以看到,具体类的创建(或者说状态转换的一个操作)是直接new 一个对应的状态类的,这个有点像工厂模式。
代码中的状态转换图:
两类状态转化图

package Resource;
//状态机
public class StateMachine
{
   
    private State state;
    private boolean type;//true代表第二种
    //构造函数,初始为wait
    public StateMachine(boolean type)
    {
   
        state=new WAITING();
//        System.out.println(state.stateName);
        this.type=type;
    }
    public void setState(State state)
    {
   
        this.state=state;
    }
    public State getState()
    {
   
        return state;
    }
    public String getStateName(){
   
        return state.stateName;
    }
    public boolean allocate()
    {
   
        if(state.stateName.equals("未分配状态")){
   
            ((WAITING) state).allocate(this);
//            System.out.println(state.stateName);
            return true;
        }else
            return false;

    }
    public boolean run()
    {
   
        if(state.stateName.equals("已分配状态")){
   
            ((ALLOCATED) state).run(this);
//            System.out.println(state.stateName);
            return true;
        }else
            
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值