状态模式(State Pattern)

什么是状态模式

一个糖果机的状态转换图如下所示:
这里写图片描述
如图,糖果机共有四种状态:有硬币、没硬币、售出糖果、糖果售罄,可以用四个常亮来表示四种状态,在糖果机类里定义投硬币、退硬币、转动曲柄、发糖果这四个动作的方法,这样,每个方法都要写与状态有关的if语句,确定在某个状态下某个动作的结果,但是这样的话,扩展起来很不方便,代码可维护性也低。可以定义一个状态接口,用四种状态类实现它,每个类实现需要的方法并适时转换到其他状态,这样,糖果机类只要对一个State对象进行操作即可,扩展也只需要增加一个类即可。下面是具体的实现:

糖果机类:

public class GumballMachine {
    State soldOutState;
    State noQuarterState;
    State hasQuarterState;
    State soldState;

    State state = soldOutState;
    int count = 0;

    public GumballMachine(int numberGumballs){
        soldOutState = new SoldOutState(this);
        noQuarterState = new NoQuarterState(this);
        hasQuarterState = new HasQuarterState(this);
        soldState = new SoldState(this);

        this.count = numberGumballs;

        if(numberGumballs > 0){
            state = noQuarterState;
        }
    }

    public void insertQuarter(){
        state.insertQuarter();
    }

    public void ejectQuarter(){
        state.ejectQuarter();
    }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值