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

建筑公司网站网站网站制作公司 郑州

建筑公司网站网站,网站制作公司 郑州,新版wordpress头像,汕头模板网建站设计模式-状态模式#xff08;State#xff09; 一、状态模式概述1.1 什么是状态模式1.2 简单实现状态模式1.3 使用状态模式的注意事项 二、状态模式的用途三、状态模式实现方式3.1 使用枚举类型实现状态模式3.2 使用内部类实现状态模式3.3 使用接口实现状态模式3.4 使用抽象… 设计模式-状态模式State 一、状态模式概述1.1 什么是状态模式1.2 简单实现状态模式1.3 使用状态模式的注意事项 二、状态模式的用途三、状态模式实现方式3.1 使用枚举类型实现状态模式3.2 使用内部类实现状态模式3.3 使用接口实现状态模式3.4 使用抽象类实现状态模式 一、状态模式概述 1.1 什么是状态模式 Java中的状态模式是一种行为设计模式它允许对象在其内部状态改变时改变其行为。这种模式主要用于实现对象之间的解耦使得对象可以在不修改其结构的情况下改变其行为。 Java中的状态模式通常包括以下角色 上下文Context负责维护当前状态和根据当前状态调用相应的状态处理方法。 状态State表示对象的状态每个状态都有一个对应的处理方法。 具体状态Concrete State是状态的具体实现继承自状态接口。 1.2 简单实现状态模式 // 状态接口 interface State {void handle(Context context); }// 具体状态A class ConcreteStateA implements State {Overridepublic void handle(Context context) {System.out.println(当前状态为A);context.setState(this);} }// 具体状态B class ConcreteStateB implements State {Overridepublic void handle(Context context) {System.out.println(当前状态为B);context.setState(this);} }// 上下文类 class Context {private State state;public Context() {this.state new ConcreteStateA(); // 初始状态为A}public void request() {state.handle(this); // 根据当前状态执行相应操作}public void setState(State state) {this.state state; // 切换状态} }public class Main {public static void main(String[] args) {Context context new Context(); // 创建上下文对象context.request(); // 输出当前状态为A并切换到状态Acontext.request(); // 输出当前状态为B并切换到状态B} }1.3 使用状态模式的注意事项 1、状态模式适用于当一个对象在它的状态发生改变时它的行为也随着发生较大的变化。也就是说在行为受状态约束的情况下可以使用状态模式。如果一个事件或者对象有很多种状态状态之间会相互转换对不同的状态要求不同行为的时候可以考虑使用状态模式。 2、状态模式的关键点在于不同的状态下对于同一行为有不同的响应。这其实就是一个将 if~else 用多态来实现的一个具体示例。 3、状态模式的使用必然会增加系统类和对象的个数。尽管状态模式提供了一个更好的方法来组织与特定状态相关的代码将繁琐的状态判断转换成结构清晰的状态类族在避免代码膨胀的同时也保证了可扩展性与可维护性但会增加系统的复杂性。 4、当使用状态模式时需要避免过多的状态转换如果对象的状态太多可能会导致系统变得复杂难以维护。最好保证对象的状态不超过5个。 5、Context类应当尽可能地简单它的职责主要是负责维护当前状态并根据当前状态调用相应的状态处理方法。如果Context类过于复杂可能会影响系统的可维护性和可扩展性。 二、状态模式的用途 1、当一个对象的状态改变时它的行为也随着发生较大的变化。也就是说在行为受状态约束的情况下可以使用状态模式。如果一个事件或者对象有很多种状态状态之间会相互转换对不同的状态要求不同行为的时候可以考虑使用状态模式。 2、状态模式的关键点在于不同的状态下对于同一行为有不同的响应。这其实就是一个将 if~else 用多态来实现的一个具体示例。 3、状态模式提供了一个更好的方法来组织与特定状态相关的代码将繁琐的状态判断转换成结构清晰的状态类族在避免代码膨胀的同时也保证了可扩展性与可维护性。 4、当使用状态模式时需要避免过多的状态转换如果对象的状态太多可能会导致系统变得复杂难以维护。最好保证对象的状态不超过5个。 三、状态模式实现方式 3.1 使用枚举类型实现状态模式 首先定义一个表示状态的枚举类型 public enum State {STATE_A,STATE_B,STATE_C }然后创建一个类该类包含一个表示当前状态的变量并提供一个方法来更改状态 public class StatePatternDemo {private State currentState;public StatePatternDemo() {currentState State.STATE_A;}public void changeState(State newState) {currentState newState;performAction();}private void performAction() {switch (currentState) {case STATE_A:System.out.println(执行状态 A 的操作);break;case STATE_B:System.out.println(执行状态 B 的操作);break;case STATE_C:System.out.println(执行状态 C 的操作);break;}} }最后创建一个主类来测试状态模式 public class Main {public static void main(String[] args) {StatePatternDemo demo new StatePatternDemo();demo.changeState(State.STATE_B);demo.changeState(State.STATE_C);} }运行上述代码将输出以下结果 执行状态 A 的操作 执行状态 B 的操作 执行状态 C 的操作3.2 使用内部类实现状态模式 首先创建一个外部类 Context它将包含一个表示当前状态的内部类 State 的实例变量。然后为每个可能的状态创建一个内部类这些类将实现一个共同的接口该接口定义了所有状态都需要实现的方法。最后在 Context 类中提供一个方法来更改状态并调用新状态的相应方法。 public class Context {// 内部类 State表示状态private State state;public Context(State state) {this.state state;}// 更改状态的方法public void setState(State state) {this.state state;}// 执行状态操作的方法public void request() {state.handle();} }// 定义一个接口表示状态需要实现的方法 interface State {void handle(); }// 具体状态类 A class StateA implements State {Overridepublic void handle() {System.out.println(处理状态 A);} }// 具体状态类 B class StateB implements State {Overridepublic void handle() {System.out.println(处理状态 B);} }// 具体状态类 C class StateC implements State {Overridepublic void handle() {System.out.println(处理状态 C);} }// 测试代码 public class Main {public static void main(String[] args) {Context context new Context(new StateA());context.request(); // 输出处理状态 Acontext.setState(new StateB());context.request(); // 输出处理状态 Bcontext.setState(new StateC());context.request(); // 输出处理状态 C} }在这个示例中我们创建了一个名为 Context 的外部类它包含一个名为 State 的内部类实例变量。我们还为每个可能的状态创建了一个内部类StateA、StateB 和 StateC它们都实现了一个名为 State 的接口。在 Context 类中我们提供了一个名为 setState 的方法来更改状态并调用新状态的 handle 方法。 3.3 使用接口实现状态模式 首先创建一个表示状态的接口 public interface State {void handle(Context context); }然后创建具体的状态类实现State接口 public class ConcreteStateA implements State {Overridepublic void handle(Context context) {System.out.println(当前状态是A);context.setState(new ConcreteStateB());} }public class ConcreteStateB implements State {Overridepublic void handle(Context context) {System.out.println(当前状态是B);context.setState(new ConcreteStateA());} }接下来创建一个上下文类用于存储当前状态并实现State接口 public class Context {private State state;public Context() {state new ConcreteStateA();}public void setState(State state) {this.state state;}public void request() {state.handle(this);} }最后在主函数中测试状态模式 public class StatePatternDemo {public static void main(String[] args) {Context context new Context();context.request(); // 输出当前状态是Acontext.request(); // 输出当前状态是Bcontext.request(); // 输出当前状态是A} }在这个示例中我们定义了一个State接口以及两个具体的状态类ConcreteStateA和ConcreteStateB。Context类负责存储当前状态并在需要时切换状态。通过调用Context类的request方法我们可以在不同状态之间进行切换。 3.4 使用抽象类实现状态模式 首先创建一个表示状态的抽象类State public abstract class State {public abstract void handle(Context context); }然后创建具体的状态类例如StartState和StopState public class StartState extends State {Overridepublic void handle(Context context) {System.out.println(启动状态);context.setState(new StopState());} }public class StopState extends State {Overridepublic void handle(Context context) {System.out.println(停止状态);context.setState(new StartState());} }接下来创建一个表示上下文的类Context并包含一个State类型的成员变量 public class Context {private State state;public Context() {this.state new StartState();}public void setState(State state) {this.state state;}public void request() {state.handle(this);} }最后在主函数中测试状态模式 public class Main {public static void main(String[] args) {Context context new Context();context.request(); // 输出启动状态context.request(); // 输出停止状态context.request(); // 输出启动状态} }在这个示例中我们使用抽象类State定义了状态的接口并创建了两个具体的状态类StartState和StopState。Context类负责管理当前状态并在需要时切换状态。通过调用context.request()方法我们可以在不同状态之间进行切换。
http://www.pierceye.com/news/623750/

相关文章:

  • 白山北京网站建设遂宁网站优化
  • 青岛网站建站公司银川网站建站公司
  • 做海报哪个网站的素材多成都私人放款联系方式电话
  • 黑河市网站建设公司广州好的网站建设
  • 番禺网站建设培训班做网站需要具备的基础条件
  • seo网站排名后退网站效果检测
  • 郑州做网站加密的公司免费logo设计生成器在线制作
  • 免费app软件下载网站公司网站定位建议
  • 如何选取网站关键词外贸商城网站建设
  • 网站的排名与权重电商平台运营是做什么
  • 网站建设的er图做兼职的网站策划书
  • 做隐私的网站大型网站制作报价
  • 保康网站建设psd转wordpress主题
  • 网站开发远程服务器如何设置三河市网站建设
  • 网站开发与运营方向已经有域名 怎么做网站
  • 绍兴网站建设专业的公司整站优化网站报价
  • 揭阳网站制作套餐邯郸市建设局网站材料下载入口
  • 整站seo公司做盗版小说网站赚钱嘛
  • 网站文章优化怎么做网站快速备案安全吗
  • dede网站本地访问速度慢哪个app可以免费下载ppt模板
  • 网站改版方案流程龙华网站建设主要工作
  • 福田网站制作报价百度推广工作怎么样
  • 常熟智能网站开发蚌埠市建设工程质监站网站
  • 网站做水印有没有影响吗怎么设计公司网页
  • 做视频推广有哪几个网站wordpress 多重筛选插件
  • 电脑网站怎样给网页做适配官方正版浏览器
  • php 可以自己做网站吗网站建设尾款如何做会计分录
  • app开发哪家公司好东莞网站优化多少钱
  • 企业网站最重要的访问对象是谈一谈对网站开发的理解
  • 国外网站做问卷怎么做免费公司网站