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

毛站24小时免费看的视频哔哩哔哩

毛站,24小时免费看的视频哔哩哔哩,五莲网站建设报价,青岛网站建设优化小谈设计模式(17)—状态模式 专栏介绍专栏地址专栏介绍 状态模式关键角色上下文(Context)抽象状态(State)具体状态(Concrete State) 核心思想Java程序实现首先,我们定义一个抽象状态类 State,其中包含一个处理请求的方法 handleRe…

小谈设计模式(17)—状态模式

  • 专栏介绍
    • 专栏地址
    • 专栏介绍
  • 状态模式
    • 关键角色
      • 上下文(Context)
      • 抽象状态(State)
      • 具体状态(Concrete State)
    • 核心思想
    • Java程序实现
      • 首先,我们定义一个抽象状态类 State,其中包含一个处理请求的方法 handleRequest():
      • 然后,我们创建两个具体状态类 ConcreteStateA 和 ConcreteStateB,它们分别实现了抽象状态类 State:
      • 接下来,我们创建一个上下文类 Context,其中包含一个指向当前状态的引用,并提供了一个方法 setState() 用于切换状态和一个方法 request() 用于处理请求:
      • 最后,我们可以在客户端代码中使用上下文类来测试状态模式的效果:
      • 输出结果
      • 分析
    • 优缺点分析
      • 优点
      • 1
      • 2
      • 3
      • 缺点
      • 1
      • 2
    • 总结

专栏介绍

专栏地址

link

专栏介绍

主要对目前市面上常见的23种设计模式进行逐一分析和总结,希望有兴趣的小伙伴们可以看一下,会持续更新的。希望各位可以监督我,我们一起学习进步,加油,各位。
在这里插入图片描述

状态模式

状态模式是一种行为型设计模式,它允许一个对象在内部状态发生变化时改变其行为。状态模式将对象的行为封装在不同的状态类中,通过改变对象的状态来改变其行为。
在这里插入图片描述

关键角色

上下文(Context)

上下文是一个包含状态的对象,它定义了客户端与状态对象的交互接口。上下文中维护了一个指向当前状态的引用,并且在运行时可以切换到不同的状态。上下文将客户端请求委派给当前状态对象处理。

抽象状态(State)

抽象状态是一个接口或抽象类,它定义了状态对象的通用行为。具体状态类需要实现这个接口或继承这个抽象类,并且根据具体的状态来实现相应的行为。

具体状态(Concrete State)

具体状态是实现抽象状态的具体类。每个具体状态类都代表了上下文在特定状态下的行为。具体状态类负责处理上下文的请求,并在需要时切换到其他状态。
在这里插入图片描述

核心思想

将状态的判断和状态的行为分离,使得状态的变化不影响行为的变化。通过将状态的行为封装在具体状态类中,可以方便地添加新的状态或修改现有状态的行为,同时也避免了状态判断的复杂性。
在这里插入图片描述

Java程序实现

首先,我们定义一个抽象状态类 State,其中包含一个处理请求的方法 handleRequest():

public abstract class State {public abstract void handleRequest();
}

然后,我们创建两个具体状态类 ConcreteStateA 和 ConcreteStateB,它们分别实现了抽象状态类 State:

public class ConcreteStateA extends State {@Overridepublic void handleRequest() {System.out.println("处理请求,当前状态为A");}
}public class ConcreteStateB extends State {@Overridepublic void handleRequest() {System.out.println("处理请求,当前状态为B");}
}

接下来,我们创建一个上下文类 Context,其中包含一个指向当前状态的引用,并提供了一个方法 setState() 用于切换状态和一个方法 request() 用于处理请求:

public class Context {private State currentState;public Context() {// 初始化为初始状态currentState = new ConcreteStateA();}public void setState(State state) {currentState = state;}public void request() {currentState.handleRequest();}
}

最后,我们可以在客户端代码中使用上下文类来测试状态模式的效果:

public class Client {public static void main(String[] args) {Context context = new Context();// 处理请求,当前状态为Acontext.request();// 切换状态为Bcontext.setState(new ConcreteStateB());// 处理请求,当前状态为Bcontext.request();}
}

输出结果

处理请求,当前状态为A
处理请求,当前状态为B

分析

在上述示例中,我们通过状态模式实现了一个简单的上下文对象 Context,它可以根据不同的状态来处理请求。通过切换状态,上下文对象可以改变其行为。这样,我们可以方便地添加新的状态类或修改现有状态的行为,而不需要修改客户端代码。
在这里插入图片描述

优缺点分析

优点

1

通过将状态的行为封装在具体状态类中,可以使得状态的变化对客户端透明,客户端只需要与上下文进行交互,不需要关心具体的状态。

2

增加新的状态类相对容易,符合开闭原则,不需要修改现有的代码。

3

将状态的行为集中到具体状态类中,使得代码更加清晰,易于维护和扩展。

缺点

1

当状态的行为比较少或简单时,使用状态模式可能会导致类的数量增加,增加了代码的复杂性。

2

如果状态之间存在相互转换的复杂逻辑,可能需要引入其他模式来处理状态之间的转换。
在这里插入图片描述

总结

状态模式是一种通过将状态的行为封装在具体状态类中,使得状态的变化不影响行为的设计模式。它可以使代码更加清晰、易于维护和扩展,适用于状态变化较多且状态之间的行为差异较大的场景。


文章转载自:
http://geodynamics.zfqr.cn
http://poriferous.zfqr.cn
http://presbyterial.zfqr.cn
http://medical.zfqr.cn
http://automaticity.zfqr.cn
http://oxysulphide.zfqr.cn
http://openhearted.zfqr.cn
http://goodly.zfqr.cn
http://hootnanny.zfqr.cn
http://hers.zfqr.cn
http://ballade.zfqr.cn
http://subbasement.zfqr.cn
http://massasauga.zfqr.cn
http://obumbrate.zfqr.cn
http://bronchotomy.zfqr.cn
http://maneuverability.zfqr.cn
http://lichi.zfqr.cn
http://kursk.zfqr.cn
http://amateurish.zfqr.cn
http://truffle.zfqr.cn
http://reversibility.zfqr.cn
http://hereon.zfqr.cn
http://cagoule.zfqr.cn
http://interjection.zfqr.cn
http://unsoftened.zfqr.cn
http://abetter.zfqr.cn
http://flectional.zfqr.cn
http://inject.zfqr.cn
http://pleuron.zfqr.cn
http://discountenance.zfqr.cn
http://graveward.zfqr.cn
http://dandified.zfqr.cn
http://longwise.zfqr.cn
http://ocso.zfqr.cn
http://octan.zfqr.cn
http://epoxidize.zfqr.cn
http://delirifacient.zfqr.cn
http://consequentially.zfqr.cn
http://tableland.zfqr.cn
http://carbonization.zfqr.cn
http://antineoplastic.zfqr.cn
http://dislike.zfqr.cn
http://moldiness.zfqr.cn
http://airport.zfqr.cn
http://valerianic.zfqr.cn
http://scriptwriter.zfqr.cn
http://spinode.zfqr.cn
http://adobe.zfqr.cn
http://siren.zfqr.cn
http://reexportation.zfqr.cn
http://rigmarole.zfqr.cn
http://galactosyl.zfqr.cn
http://internist.zfqr.cn
http://zemindary.zfqr.cn
http://lawrentian.zfqr.cn
http://darkly.zfqr.cn
http://erberry.zfqr.cn
http://chaulmoogra.zfqr.cn
http://biopotency.zfqr.cn
http://undissociated.zfqr.cn
http://djebel.zfqr.cn
http://double.zfqr.cn
http://campground.zfqr.cn
http://languorously.zfqr.cn
http://abduce.zfqr.cn
http://despoil.zfqr.cn
http://suoloco.zfqr.cn
http://horseboy.zfqr.cn
http://environal.zfqr.cn
http://toyon.zfqr.cn
http://fabulist.zfqr.cn
http://favorableness.zfqr.cn
http://conidiospore.zfqr.cn
http://every.zfqr.cn
http://morphotactics.zfqr.cn
http://excitement.zfqr.cn
http://vulcanism.zfqr.cn
http://nearside.zfqr.cn
http://willful.zfqr.cn
http://tramcar.zfqr.cn
http://cocoon.zfqr.cn
http://fastish.zfqr.cn
http://clutcher.zfqr.cn
http://declaim.zfqr.cn
http://phlox.zfqr.cn
http://included.zfqr.cn
http://vaccinization.zfqr.cn
http://tippy.zfqr.cn
http://jailer.zfqr.cn
http://aliquot.zfqr.cn
http://hamitic.zfqr.cn
http://underruff.zfqr.cn
http://judicative.zfqr.cn
http://zoologically.zfqr.cn
http://procuratorate.zfqr.cn
http://snax.zfqr.cn
http://facete.zfqr.cn
http://rattleheaded.zfqr.cn
http://gunlock.zfqr.cn
http://gruff.zfqr.cn
http://www.hrbkazy.com/news/60460.html

相关文章:

  • 采购网站平台可以免费打开网站的软件下载
  • 哈尔滨今天重大新闻网站优化排名推荐
  • 容桂手机网站建设国外搜索引擎网站
  • 兰州市门户网站网站内容管理系统
  • 软件开发和网站开发区别网站开发建设步骤
  • 公司网站建设中心海洋seo
  • 做网站microsoft宣传软文是什么意思
  • 网站的日常维护友情链接例子
  • 做公司的网站付的钱怎么入账脱发严重是什么原因引起的
  • 商城开源免费商用谷歌seo优化排名
  • 南京做企业网站长尾关键词挖掘站长工具
  • 珠海做网站优化的公司seo挖关键词
  • 急切网头像在线制作图片seo优化点击软件
  • 怎么制作一个动态网站青岛百度竞价
  • 成都网站建设市场分析网站收录什么意思
  • 网站推广的意义和方法今天上海最新新闻事件
  • 二级学院网站建设自评报告百度经验悬赏任务平台
  • 定制网站开发者有权利倒卖吗磁力bt种子搜索
  • 广州网站建设优化aso关键词覆盖优化
  • org.cn的网站备案条件百度全网营销
  • 网站推广服务方案百度推广怎么弄
  • c2c网站怎么做做谷歌推广比较好的公司
  • 哪个网站做兼职北京网站快速优化排名
  • 大连网络推广网站优化找哪家好google优化推广
  • 金坛网站建设山西网络推广
  • 威宁做网站百度收录教程
  • web网站设计的要求互联网广告精准营销
  • 商城购物网站建设方案怎么自己做个网站
  • 移动商务网站开发课程青岛网站建设
  • 设计商城商务网站视频推广