本文主要是介绍Java实现状态模式的示例代码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
《Java实现状态模式的示例代码》状态模式是一种行为型设计模式,允许对象根据其内部状态改变行为,本文主要介绍了Java实现状态模式的示例代码,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来...
一、简介
1、定义
状态模式 (State Pattern)是一种行为型设计模式,允许对象在内部状态改变时改变它的行为。通过定义状态接口和具体状态类,将对象的状态和行为分开,使得状态改变时可以改变行为。
2、状态模式的结构
状态模式涉及以下几个角色:
State(状态接口):定义了状态类的共同接口,所有具体的状态类都实现这个接口。
ConcreteState(具体状态类):每个具体的状态类实现了State接口,并定义了在该状态下的具体行为。
Context(上下文):上下文类维护一个当前状态的引用,它通常会委托给具体的状态类来执行相应的状态切换。
二、Java实现案例
1、电灯开关状态案例
/** * @Description: 状态接口 * @Date: 2025-02-07 17:09 * @Author: gaoyufei **/ public interface State { void handle(Switch context); } /** * @Description: 关灯状态 * @Date: 2025-02-07 17:12 * @Author: gaoyufei **/ public class CloseState implements State{ @Override public void handle(Switch switcher) { switcher.setState(new OpenState()); System.out.println("开灯了"); } } /** * @Description: 开灯状态 * @Date: 2025-02-07 17:11 * @Author: gaoyufei **/ public class OpenState implements State{ @Override public void handle(Switch switcher) { switcher.setState(new CloseState()); System.out.println("关灯了"); } } /** * @Description: 开关,持有灯的状态 * @Date: 2025-02-07 17:08 * @Author: gaoyufei **/ public class Switch { private State state; public Switch(State state){ this.state=state; } public void setState(State state){ this.state=state; } public void press(){ state.handle(this); } } /** * @Description: 操作人 * @Date: 2025-02-07 17:14 * @Author: gaoyufei **/ public class Operator { public static void main(String[] args) throws InterruptedException { Switch switcher=new Switch(new CloseState());//初始状态是关灯 //模拟每隔1秒按压一下开关 while (true){ Thread.sleep(1000); switcher.press(); } } }
2、番茄工作法状态案例
/** * @Description: 番茄状态接口 * @Date: 2025-02-08 10:49 * @Author: gaoyufei **/ public interface TomatoState { void deal(Worker worker); } /** * @Description: 番茄-工作状态类 * @Date: 2025-02-08 10:51 * @Author: gaoyufei **/ public class WorkTomatoState implements TomatoState { @Override public void deal(Worker worker) { System.out.println("休息结束了,开始工作吧"); try { Thread.sleep(25*60*1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("工作了25分钟"); worker.setTomatoState(new RestTomatoState()); } } /** * @Description: 番茄-休息状态类 * @Date: 2025-02-08 10:53 * @Author: gaoyufei **/ public class RestTomatoState implements TomatoState{ @Override public void deal(Worker worker) { System.out.println("工作结束了,好好休息吧"); try { Thread.sleep(5*60*1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("休息了5分钟"); worker.setTomatoState(new WorkTomatoState()); } } /** * @Description: 工作者 * @Date: 2025-02-08 10:51 * @Author: gaoyufei **/ public class Worker { private TomatoState tomatoState; public Worker(TomatoState tomatoState){ this.tomatoState=tomatoState; } public void setTomatoState(TomatoSChina编程tate tomatoState){ this.tomatoState=tomatoState; } public void startTomatoClock(){ this.tomatoState.deal(this); } } /** * @Description: 客户端 * @Date: 2025-02-08 11:02 * @Author: gaoyufei **/ public class Client { public static void main(String[] args) { Worker worker=new Worker(new WorkTomatoState()); while (true){ worker.startTomatoClock(); } } }
3、电梯状态案例
这是一个简单的电梯系统。电梯的状态有关门、开门、上升、下降、停止。每个状态下电梯的行为不同。通过状态模式,根js据电梯的不同状态执行不同的行为。
/** * @Description: 电梯状态接口 * @Date: 2025-02-08 9:02 * @Author: gaoyufei **/ public interface ElevatorState { void openDoor(); void closeDoor(); void moveUp(); void moveDown(); void stop(); } /** * @Description: 关门状态 * @Date: 2025-02-08 9:05 * @Author: gaoyufei **/ public class CloseState implements ElevatorState { private Elevator elevator; public CloseState(Elevator elevator){ this.elevator=elevator; } @Override public void openDoor() { System.out.println("电梯门开了"); elevator.setCurrentState(elevator.getOpenState()); } @Override public void closeDoor() { System.out.println("电梯门已经关了"); } @Override public void moveUp() { System.out.println("电梯上升"); elevator.setCurrentState(elevator.getMovingUpState()); } @Override public void moveDown() { System.out.println("电梯下降"); elevator.setCurrentState(elevator.getMovingDownState()); } @Override public void stop() { System.out.println("电梯停止"); elevator.setCurrentState(elevator.getStopState()); } } /** * @Description: 开门状态 * @Date: 2025-02-08 9:07 * @Author: gaoyufei **/ public class OpenState implements ElevatorState{ private Elevator elevator; public OpenState(Elevator elevator){ this.elevator=elevator; } @Override public void openDoor() { System.out.println("电梯门已经打开"); } @Override public void closeDoor() { System.out.println("电梯门关了"); elevator.setCurrentState(elevator.getCloseState()); } @Override public void moveUp() { System.out.println("电梯门打开状态,不能上升"); } @Override public void moveDown() { System.out.println("电梯门打开状态,不能下降"); } @Override public void stop() { System.out.println("电梯门打开状态,不能变换为停止状态"); } } /** * @Description: js停止状态 * @Date: 2025-02-08 9:59 * @Author: gaoyufei **/ public class StopState implements ElevatorState{ private Elevator elevator; public StopState(Elevator elevator){ this.elevator=elevator; } @Override public void openDoor() { System.out.println("电梯门开了"); elevator.setCurrentState(elevator.getOpenState()); } @Override public void closeDoor() { System.out.println("电梯门关了"); elevator.setCurrentState(elevator.getCloseState()); } @Override public void moveUp() { System.out.println("电梯上升"); elevator.setCurrentState(elevator.getMovingUpState()); } @Override public void moveDown() { System.out.println("电梯下降"); elevator.setCurrentState(elevator.getMovingDownState()); } @Override public void stop() { System.out.println("电梯停止"); } } /** * @Description: 上升状态 * @Date: 2025-02-08 9:07 * @Author: gaoyufei **/ public class MovingUpState implements ElevatorState{ private Elevator elevator; public MovingUpState(Elevator elevator){ this.elevator=elevator; } @Override public void openDoor() { System.out.println("电梯正在上升,不能开门"); } @Override public void closeDoor() { System.out.println("电梯已经关门"); } @Override public void moveUp() { System.out.println("电梯正在上升"); } @Override public void moveDown() { System.out.println("电梯下降"); elevator.setCurrentState(elevator.getMovingDownState()); } @Override public void stop() { System.out.println("电梯停止"); elevator.setCurrentState(elevator.getStopState()); } } /** * @Description: 下降状态 * @Date: 2025-02-08 9:08 * @Author: gaoyufei **/ public class MovingDownState implements ElevatorState{ private Elevator elevator; public MovingDownState(Elevator elevator){ this.elevator=elevator; } @Override public void openDoor() { System.out.println("电梯正在下降,不能开门"); } @Override public void closeDoor() { System.out.println("电梯正在下降,已经关门了"); } @Override public void moveUp() { System.out.println("电梯上升"); elevator.setCurrentState(elevator.getMovingUpState()); } @Override public void moveDown() { System.out.println("电梯正在下降"); } @Override public void stop() { System.out.println("电梯停止"); elevator.setCurrentState(elevator.getStopState()); } } /** * @Description: 电梯 * @Date: 2025-02-08 9:04 * @Author: gaoyufei **/ public class Elevator { private ElevatorState closeState; private ElevatorState openState; private ElevatorState movingDownState; private ElevatorState movingUpState; private ElevatorState stopState; private ElevatorState c编程urrentState; public Elevator(){ closeState=new CloseState(this); openState=new OpenState(this); movingDownState=new MovingDownState(this); movingUpState=new MovingUpState(this); stopState=new StopState(this); currentState=closeState;// 默认初始状态为关闭状态 } public void setCurrentState(ElevatorState currentState) { this.currentState = currentState; } public ElevatorState getCloseState() { return closeState; } public ElevatorState getOpenState() { return openState; } public ElevatorState getMovingDownState() { return movingDownState; } public ElevatorState getMovingUpState() { return movingUpState; } public ElevatorState getStopState() { return stopState; } public void openDoor(){ currentState.openDoor(); } public void closeDoor(){ currentState.closeDoor(); } public void moveUp(){ currentState.moveUp(); } public void moveDown(){ currentState.moveDown(); } public void stop(){ currentState.stop(); } } /** * @Description: 客户端 php* @Date: 2025-02-08 9:29 * @Author: gaoyufei **/ public class Client { public static void main(String[] args) { //初始关闭状态 Elevator elevator=new Elevator(); //关门 elevator.closeDoor();//输出 电梯门已经关了 //开门 elevator.openDoor();//输出 电梯门开了 //上升 elevator.moveUp();//输出 电梯门打开状态不能上升 //关门 elevator.closeDoor();//输出 电梯门关了 //上升 elevator.moveUp();//输出 电梯上升 //关门 elevator.closeDoor();//输出 电梯已经关门 //下降 elevator.moveDown();//输出 电梯下降 //停止 elevator.stop();//输出 电梯停止 //开门 elevator.openDoor();//输出 电梯门开了 //停止 elevator.stop();//输出 电梯门打开状态,不能变换为停止状态 } }
到此这篇关于Java实现状态模式的示例代码的文章就介绍到这了,更多相关Java 状态模式内容请搜索编程China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持China编程(www.chinasem.cn)!
这篇关于Java实现状态模式的示例代码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!