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

做音响的是哪个网站建站排行榜

做音响的是哪个网站,建站排行榜,3d效果图多少钱一张,关键词排名优化免费状态模式 (State Pattern) 状态模式是一种行为型设计模式,它允许对象在其内部状态改变时改变其行为。状态模式让一个对象在其状态改变时,其行为也随之改变,看起来就像是改变了对象的类。通过将状态的变化封装到不同的状态对象中,…

状态模式 (State Pattern)

状态模式是一种行为型设计模式,它允许对象在其内部状态改变时改变其行为。状态模式让一个对象在其状态改变时,其行为也随之改变,看起来就像是改变了对象的类。通过将状态的变化封装到不同的状态对象中,状态模式可以使对象的行为更加灵活和可扩展。


1. 状态模式的组成

状态模式通常包含以下几个角色:

  • Context(上下文):上下文类维护一个当前状态的引用,它通常会委托给具体的状态类来执行相关行为。上下文类还可以动态地切换状态。
  • State(状态接口):定义了状态类的共同接口,所有具体的状态类都实现这个接口。
  • ConcreteState(具体状态类):每个具体的状态类实现了State接口,并定义了在该状态下的具体行为。

2. 状态模式的工作流程

  1. 上下文对象持有一个当前的状态对象,并通过调用状态对象的行为来执行相应的操作。
  2. 每个状态类(ConcreteState)实现了State接口,并提供了在该状态下的具体实现。
  3. 上下文可以在不同状态之间进行切换,通常由外部环境或条件触发。

3. 状态模式的实现

场景示例:电梯系统

我们来实现一个简单的电梯系统。电梯可以处于多个状态,比如:空闲运行停靠。每个状态下电梯的行为不同。通过状态模式,我们可以根据电梯的不同状态执行不同的行为。


1) 定义状态接口

状态接口定义了电梯所支持的操作,如openDoor()closeDoor()等。

// 状态接口
public interface ElevatorState {void openDoor();void closeDoor();void moveUp();void moveDown();
}

2) 定义具体状态类

每个具体的状态类实现了ElevatorState接口,并定义了该状态下电梯的具体行为。

// 空闲状态
public class IdleState implements ElevatorState {private Elevator elevator;public IdleState(Elevator elevator) {this.elevator = elevator;}@Overridepublic void openDoor() {System.out.println("The door is opening.");elevator.setCurrentState(elevator.getOpenState());}@Overridepublic void closeDoor() {System.out.println("The door is already closed.");}@Overridepublic void moveUp() {System.out.println("The elevator is moving up.");elevator.setCurrentState(elevator.getMovingUpState());}@Overridepublic void moveDown() {System.out.println("The elevator is moving down.");elevator.setCurrentState(elevator.getMovingDownState());}
}// 开门状态
public class OpenState implements ElevatorState {private Elevator elevator;public OpenState(Elevator elevator) {this.elevator = elevator;}@Overridepublic void openDoor() {System.out.println("The door is already open.");}@Overridepublic void closeDoor() {System.out.println("Closing the door.");elevator.setCurrentState(elevator.getIdleState());}@Overridepublic void moveUp() {System.out.println("Cannot move while the door is open.");}@Overridepublic void moveDown() {System.out.println("Cannot move while the door is open.");}
}// 上升状态
public class MovingUpState implements ElevatorState {private Elevator elevator;public MovingUpState(Elevator elevator) {this.elevator = elevator;}@Overridepublic void openDoor() {System.out.println("Cannot open the door while the elevator is moving up.");}@Overridepublic void closeDoor() {System.out.println("The door is already closed.");}@Overridepublic void moveUp() {System.out.println("The elevator is already moving up.");}@Overridepublic void moveDown() {System.out.println("Changing direction to move down.");elevator.setCurrentState(elevator.getMovingDownState());}
}// 下降状态
public class MovingDownState implements ElevatorState {private Elevator elevator;public MovingDownState(Elevator elevator) {this.elevator = elevator;}@Overridepublic void openDoor() {System.out.println("Cannot open the door while the elevator is moving down.");}@Overridepublic void closeDoor() {System.out.println("The door is already closed.");}@Overridepublic void moveUp() {System.out.println("Changing direction to move up.");elevator.setCurrentState(elevator.getMovingUpState());}@Overridepublic void moveDown() {System.out.println("The elevator is already moving down.");}
}

3) 定义上下文类

Elevator类是上下文类,负责维护当前的状态,并委托给具体状态类执行操作。

// 电梯类(上下文)
public class Elevator {private ElevatorState idleState;private ElevatorState openState;private ElevatorState movingUpState;private ElevatorState movingDownState;private ElevatorState currentState;public Elevator() {idleState = new IdleState(this);openState = new OpenState(this);movingUpState = new MovingUpState(this);movingDownState = new MovingDownState(this);currentState = idleState;  // 默认初始状态为空闲状态}// 切换状态public void setCurrentState(ElevatorState state) {this.currentState = state;}// 获取当前状态public ElevatorState getCurrentState() {return currentState;}public ElevatorState getIdleState() {return idleState;}public ElevatorState getOpenState() {return openState;}public ElevatorState getMovingUpState() {return movingUpState;}public ElevatorState getMovingDownState() {return movingDownState;}// 电梯操作public void openDoor() {currentState.openDoor();}public void closeDoor() {currentState.closeDoor();}public void moveUp() {currentState.moveUp();}public void moveDown() {currentState.moveDown();}
}

4) 客户端代码

客户端代码模拟了电梯的操作,演示了不同状态下电梯的行为。

public class Client {public static void main(String[] args) {// 创建电梯对象Elevator elevator = new Elevator();// 电梯空闲时elevator.openDoor();  // 输出:The door is opening.elevator.moveUp();    // 输出:The elevator is moving up.// 电梯上升时elevator.moveDown();  // 输出:Changing direction to move down.elevator.openDoor();  // 输出:Cannot open the door while the elevator is moving down.// 电梯下降时elevator.closeDoor(); // 输出:The door is already closed.elevator.moveUp();    // 输出:Changing direction to move up.}
}

运行结果:
The door is opening.
The elevator is moving up.
Changing direction to move down.
Cannot open the door while the elevator is moving down.
The door is already closed.
Changing direction to move up.

4. 状态模式的优点

  1. 封装状态行为: 每个状态类封装了具体的状态行为,使得不同状态的行为不会混合在一起。
  2. 扩展性: 当需要添加新的状态时,可以通过增加新的状态类而不影响现有的代码,符合开闭原则。
  3. 清晰的状态转换: 状态的转换和每个状态的行为都清晰地定义在具体状态类中,使得代码更容易理解和维护。

5. 状态模式的缺点

  1. 类的数量增加: 每个状态都需要定义一个具体的状态类,当状态种类较多时,可能会导致类的数量激增,增加系统复杂度。
  2. 状态之间的相互依赖: 有时状态之间的转换逻辑较为复杂,可能会引发状态类之间的依赖关系,需要小心设计。

6. 状态模式的应用场景

  • 工作流引擎: 当某个任务根据不同的状态执行不同操作时,状态模式非常适用,例如审批流程中的不同状态(待审批、审批中、已通过、已拒绝等)。
  • 有限状态机: 适用于有限的状态集合,如游戏中的玩家状态(例如,待机、攻击、跳跃等)。
  • GUI组件: 例如,按钮、窗体等可以有不同的状态(激活、禁用、隐藏等),这些状态的行为可以通过状态模式来管理。

7. 总结

状态模式通过将每个状态的行为封装在独立的状态对象中,使得对象的行为随状态变化而变化。这种模式可以有效地管理和扩展具有多个状态的对象,特别是在复杂的状态转移和行为执行场景中,它提供了一种灵活且清晰的解决方案。

http://www.yayakq.cn/news/163763/

相关文章:

  • 投诉做网站的电话漯河市郾城区网站建设
  • 商务酒店网站模板做书app下载网站有哪些
  • 手机网站制作行业排行在线做ppt的网站
  • 怎么把自己网站推广出去如何运营一个网站
  • 沈阳网站建设企业烟台景明网络科技有限公司
  • 吉林平台网站建设多少钱做网站用什么配置笔记本
  • 宁波手机网站开发公司有有资源网
  • wordpress 资源下载插件台州做优化
  • 营业执照咋做网等网站河南省建设教育培训中心网站
  • 湖南网站开发哪家好全网精选小程序
  • 教育网站制作实训报告搜索引擎营销的优势和劣势
  • 加强人社局网站建设做资源下载网站违法吗
  • 网站开发前台后台全国做网站最好的公司
  • 在线html网站开发个旧做网站哪家公司好
  • 广州天美展览公司网站宁波那家公司做网站好
  • 西宁网站建设最好的公司五屏网站建设动态
  • 如何用一个域名做多个网站网站排名是什么意思
  • 重庆网站建设制作设计公司哪家好百度seo优化排名如何
  • 企业营销网站大连开发区商场
  • 网站做rss wordpress团购营销型网站制作
  • 设计交流的网站app手机网站制作
  • Wordpress编辑主页页面seo排名优化软件免费
  • 电子商务网站建设实训报告范文ui动效网站
  • 网站建设外包公司方案网站开发标准
  • 设计师自己做网站技术培训
  • 新乡营销网站建设公司网站换vps
  • 吉林省建设局网站网站设计标注图用什么做的
  • 中国有兼职网站开发网站吗永川区网站建设
  • dedecms手机网站仿制wordpress插件开发教程 pdf
  • 购物网站需求分析wordpress怎么匿名评论