java设计模式 连续处理_Java 设计模式(12) —— 状态模式

本文介绍了如何使用Java实现状态模式,通过智能糖果机的案例展示了如何根据内部状态变化改变对象行为。文章分析了传统面向对象模式的不足,并通过引入状态模式进行了改进,使代码更易于扩展。
摘要由CSDN通过智能技术生成

一、状态模式

能根据内部状态的变化,改变对象的行为,看起来好像修改了类

5b017eff8d44?utm_source=oschina-app

状态模式

二、示例

智能糖果机:需要设计一款自助购买的糖果机,糖果机的状态有

准备使用(接下来可投入硬币)

投入硬币(接下来可摇动把手或者退出硬币)

售出糖果(接下来可恢复使用或者售罄)

售罄状态

使用传统的面向对象模式,只需定义一个糖果机的对象,内部根据不同的状态进行不同的操作处理

/**

* 面向对象模式,糖果机

*/

public class CandyMachine {

final static int SoldOutState = 0; // 售罄状态

final static int OnReadyState = 1; // 准备售出状态

final static int HasCoin = 2; // 已经投了硬币的状态

final static int SoldState = 3; // 售出状态

private int state = SoldOutState;

private int count = 0; // 内部糖果的剩余数量

public CandyMachine(int count) {

this.count = count;

if (count > 0) {

state = OnReadyState;

}

}

/**

* 投入硬币,如果糖果机状态是准备售出,则可以摇动把手购买糖果,其他的状态则无法使用

*/

public void insertCoin() {

switch (state) {

case SoldOutState:

System.out.println("you can't insert coin,the machine sold out!");

break;

case OnReadyState:

state = HasCoin;

System.out

.println("you have inserted a coin,next,please turn crank!");

break;

case HasCoin:

System.out.println("you can't insert another coin!");

break;

case SoldState:

System.out.println("please wait!we are giving you a candy!");

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值