软件构造Lab3实验总结——状态(State)

前言:在漫长的实验三过去之后,经历了无数的踩坑之后总算是完成了,因而再次分几个部分记录一下遇到的问题及解决方案
状态(State)模式
这是我们在开发程序时候会经常遇到的事情,一个程序在不同的上下文环境中,不同的方法可能会有不同的返回值,或者是对于某些方法,在部分状态中实现,而在另一些状态中则不予实现。因而我们就需要实现状态模式的开发。
在此见要说明一下状态模式的设计过程:
首先我们需要抽象出一个状态类,考虑到程序中所有与状态有关的方法(主要为状态转移方法),全部在这个类中完成抽象方法的定义(在我的设计模式中,该类方法返回值全部为Boolean,目的是在不同的具体状态中,如果该方法不需要实现,则可以直接返回false)。然后在总结出程序所处的所有不同状态,归为子状态类,全部承接前文提到的抽象状态类分别实现即可。最后只要在我们的程序中定义State变量就可以实现自己设计的状态模式啦。
拿本次实验举例子:
这是在本次实验中实现的状态模式设计

public interface State<R> {
	 public abstract boolean AllocatedPlanningEntry(CommonPlanningEntry entry, List<R> resources);
	public abstract boolean StartPlanningEntry(CommonPlanningEntry entry);
	public abstract boolean BlockPlanningEntry(CommonPlanningEntry entry);
	public abstract boolean FinishPlanningEntry(CommonPlanningEntry entry);
	public abstract boolean CancelPlanningEntry(CommonPlanningEntry entry);
	public String getState();
}

这是抽象的State类中定义的全部抽象方法。

public class WAITING<R> implements State<R> {

    @Override
    public boolean AllocatedPlanningEntry(CommonPlanningEntry entry, List<R> resources) {
        entry.AllocateResource(resources);
        entry.SetEntryState(new ALLOCATED());
        return true;
    }

    @Override
    public boolean StartPlanningEntry(CommonPlanningEntry entry) {
        return false;
    }

    @Override
    public boolean BlockPlanningEntry(CommonPlanningEntry entry) {
        return false;
    }

    @Override
    public boolean FinishPlanningEntry(CommonPlanningEntry entry) {
        return false;
    }

    @Override
    public boolean CancelPlanningEntry(CommonPlanningEntry entry) {
        entry.SetEntryState(new CANCELLED());
        return true;
    }

    @Override
    public String getState() {
        return "等待中";
    }
}

以WAITING状态为例,需要实现的方法具体实现,不需要实现的方法直接return false即可。

private State state ;
	public State getEntryState(){
		return this.state;
	}
    public void SetEntryState(State state){
		this.state=state;
	}


	@Override
	public boolean ALLOCATED(List<R> resources) {

		return this.state.AllocatedPlanningEntry(this,resources);
	}

	@Override
	public boolean BLOCKED() {
		return this.state.BlockPlanningEntry(this);
	}

	@Override
	public boolean CANCELLED() {
		return this.state.CancelPlanningEntry(this);
	}


	@Override
	public boolean RUNNING() {
		return this.state.StartPlanningEntry(this);
	}

	@Override
	public boolean ENDED() {
		return this.state.FinishPlanningEntry(this);
	}

在需要设置状态的程序中定义状态变量,实现得到状态和修改状态的方法。最后在constructor中将其初始化为初始状态即可。

this.SetEntryState(new WAITING());

这样,简单的状态模式就设计完成了~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值