当前位置: 首页 > wzjs >正文

怎么建设网站临汾石家庄seo关键词排名

怎么建设网站临汾,石家庄seo关键词排名,制图软件有哪几种,哈尔滨网站开发公司电话引言 “人生如戏,全靠状态。”——设计模式也深知这一点。 一、什么是状态模式(State Pattern) 状态模式是一种行为型设计模式,允许对象在内部状态改变时,改变它的行为。也就是说,看起来像是修改了它的类…

引言

“人生如戏,全靠状态。”——设计模式也深知这一点。


一、什么是状态模式(State Pattern)

状态模式是一种行为型设计模式,允许对象在内部状态改变时,改变它的行为。也就是说,看起来像是修改了它的类

通俗解释

就像一只电风扇,有关机状态低速状态高速状态。你按下按钮,它就在不同的状态间切换。状态决定了电风扇的行为


二、示例讲解:

本篇我们以“自动售货机 Vending Machine”为例。它可能处于以下状态:

  • 等待投币
  • 已投币,等待选择
  • 正在出货
  • 售罄

用户的操作行为(如投币、选择商品、取货)会根据当前状态产生不同的响应。


三、UML 图结构(PlantUML):

@startuml
interface State {+insertCoin()+selectProduct()+dispense()
}class WaitingForCoin implements State
class HasCoin implements State
class Dispensing implements State
class SoldOut implements Stateclass VendingMachine {-state: State+setState(s: State)+insertCoin()+selectProduct()+dispense()
}State <|.. WaitingForCoin
State <|.. HasCoin
State <|.. Dispensing
State <|.. SoldOut
VendingMachine --> State
@enduml

在这里插入图片描述


四、Java 实现代码

状态接口

public interface State {void insertCoin();void selectProduct();void dispense();
}

具体状态实现

等待投币状态

public class WaitingForCoinState implements State {private VendingMachine machine;public WaitingForCoinState(VendingMachine machine) {this.machine = machine;}@Overridepublic void insertCoin() {System.out.println("硬币已投入。");machine.setState(machine.getHasCoinState());}@Overridepublic void selectProduct() {System.out.println("请先投币!");}@Overridepublic void dispense() {System.out.println("不能发货,请先投币并选择商品。");}
}

已投币状态

public class HasCoinState implements State {private VendingMachine machine;public HasCoinState(VendingMachine machine) {this.machine = machine;}@Overridepublic void insertCoin() {System.out.println("已经有硬币了,请先选择商品。");}@Overridepublic void selectProduct() {System.out.println("商品已选择,正在出货...");machine.setState(machine.getDispensingState());}@Overridepublic void dispense() {System.out.println("请先选择商品!");}
}

出货中状态

public class DispensingState implements State {private VendingMachine machine;public DispensingState(VendingMachine machine) {this.machine = machine;}@Overridepublic void insertCoin() {System.out.println("正在出货,请稍候...");}@Overridepublic void selectProduct() {System.out.println("已经选择了,请等待出货。");}@Overridepublic void dispense() {System.out.println("出货完成!");if (machine.getProductCount() > 0) {machine.setState(machine.getWaitingForCoinState());} else {System.out.println("商品售罄!");machine.setState(machine.getSoldOutState());}}
}

售罄状态

public class SoldOutState implements State {private VendingMachine machine;public SoldOutState(VendingMachine machine) {this.machine = machine;}@Overridepublic void insertCoin() {System.out.println("商品已售罄,请勿投币。");}@Overridepublic void selectProduct() {System.out.println("无法选择商品,已售罄。");}@Overridepublic void dispense() {System.out.println("无法出货,商品售罄。");}
}

状态持有者:VendingMachine 类

public class VendingMachine {private State waitingForCoinState;private State hasCoinState;private State dispensingState;private State soldOutState;private State currentState;private int productCount;public VendingMachine(int initialCount) {waitingForCoinState = new WaitingForCoinState(this);hasCoinState = new HasCoinState(this);dispensingState = new DispensingState(this);soldOutState = new SoldOutState(this);this.productCount = initialCount;this.currentState = initialCount > 0 ? waitingForCoinState : soldOutState;}public void insertCoin() {currentState.insertCoin();}public void selectProduct() {currentState.selectProduct();}public void dispense() {currentState.dispense();if (productCount > 0 && currentState == dispensingState) {productCount--;}}// Getters & Setterspublic void setState(State state) {this.currentState = state;}public State getWaitingForCoinState() { return waitingForCoinState; }public State getHasCoinState() { return hasCoinState; }public State getDispensingState() { return dispensingState; }public State getSoldOutState() { return soldOutState; }public int getProductCount() { return productCount; }
}

测试代码

public class Main {public static void main(String[] args) {VendingMachine machine = new VendingMachine(2);machine.insertCoin();machine.selectProduct();machine.dispense();machine.insertCoin();machine.selectProduct();machine.dispense();// 尝试再买一次machine.insertCoin();machine.selectProduct();machine.dispense();}
}

五、总结:状态模式的优缺点

优点:

  • 封装状态转换逻辑,消除了大量 if-else
  • 新状态扩展易如反掌
  • 状态切换透明,对外接口不变

缺点:

  • 类数量变多(每个状态一个类)
  • 状态之间可能耦合紧密

六、适用场景

  • 对象行为依赖于状态变化(如:文档编辑器、交通灯、媒体播放器)
  • 状态可枚举、行为可切换,但不适合用大量 if/else 处理

七、参考

《23种设计模式概览》

在这里插入图片描述

http://www.dtcms.com/wzjs/279647.html

相关文章:

  • 郑州做网站推广地站长工具seo综合查询 分析
  • 查网站关键词工具百度网盘搜索引擎入口在哪里
  • 做360优化网站都有哪家免费合作推广
  • 惠州网页模板建站企业网站设计公司
  • ubuntu wordpress安装ftpseo网站推广平台
  • 美国做美业网站的么特汕头企业网络推广
  • 聊城手机站网站公司电话号码广告策划方案怎么做
  • 做食品网站有哪些西安计算机培训机构排名前十
  • er图关于网站建设廊坊网络推广公司
  • 做网站每年运营要花掉多少钱小程序推广引流
  • 娄底网站建设设计网络营销的目的是
  • 企业网站类型爱站之家
  • 中华人民共住房和城乡建设部网站搜索优化引擎
  • 广州做网站公司排名公司软文怎么写
  • 太原网站制作哪家不错百度识图扫一扫入口
  • 网站开发平台工具百度推广seo怎么学
  • 集团网站建设定制网站建设品牌传播策划方案
  • 马关网站建设互联网营销平台
  • 贵阳做网站方舟网络站长之家查询的网址
  • 开家给别人做网站公司一周热点新闻
  • 封面设计网站上海seo网站推广
  • php做数据网站快速提高关键词排名的软件
  • app外包接活内蒙古seo优化
  • 漳州专业网站建设公司广州百度推广电话
  • 免费的网站如何建设sem网络营销
  • wordpress外贸网站建设西安网站seo
  • 做门户网站啥意思上海今日头条新闻
  • 简历模板免费网站怎么建立企业网站免费的
  • 网站报价系统南京seo推广
  • 贾汪网站建设个人发布信息免费推广平台