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

用凡科做网站要钱吗西安危机公关公司

用凡科做网站要钱吗,西安危机公关公司,小吴seo博客,网站建设步骤电脑👈️上一篇:访问者模式 | 下一篇:解释器模式👉️ 设计模式-专栏👈️ 文章目录 状态模式定义英文定义直译如何理解呢? 状态模式的角色Context(环境类)State(抽象状态类)Concret…

👈️上一篇:访问者模式    |   下一篇:解释器模式👉️

设计模式-专栏👈️


文章目录

  • 状态模式
  • 定义
    • 英文定义
    • 直译
    • 如何理解呢?
  • 状态模式的角色
    • Context(环境类)
    • State(抽象状态类)
    • ConcreteState(具体状态类)
    • 类图
    • 代码示例
  • 状态模式的应用
    • 优点
    • 缺点
    • 使用场景

状态模式

状态模式State Pattern)又称为状态对象(Objects for States)模式,该模式允许一个对象在其内部状态改变时改变其行为。

状态模式就像一部智能的“剧情播放器”,根据不同的“剧本”(状态)自动切换“演员”(行为),让系统“表演”出各种复杂且有序的行为。

定义

英文定义

The State Pattern allows an object to alter its behavior when its internal state changes. The object will appear to change its class.

直译

状态模式允许一个对象在其内部状态改变时改变其行为。这个对象看起来像是改变了它的类。

如何理解呢?

状态模式就像是一个智能的“状态机”,它可以管理一个对象的多种状态,并根据当前状态来执行相应的行为。

比如,我们可以把一个电梯看作是一个对象,它有三种状态:停止、运行和故障。

当电梯处于不同的状态时,它的行为也会不同。

例如,

当电梯处于停止状态时,它不会移动;

当电梯处于运行状态时,它可以响应乘客的上下行请求;

当电梯出现故障时,它会停止运行并发出警报。

通过使用状态模式,我们可以将这些状态和对应的行为封装在单独的类中,使得代码更加清晰和易于维护。

同时,当需要添加新的状态或修改某个状态的行为时,我们只需要修改对应的状态类,而不需要修改其他部分的代码,这使得系统具有很好的扩展性和可维护性。

当控制一个对象状态的条件表达式过于复杂时,状态模式可以将这些复杂的判断逻辑转移到表示不同状态的一系列类中,从而简化判断逻辑。

状态模式的角色

Context(环境类)

也称为上下文,它定义了客户端所感兴趣的接口,并且维护一个具体状态对象的实例。这个实例定义了当前状态。

State(抽象状态类)

这是一个抽象类或接口,用以封装与Context的一个特定状态相关的行为。

ConcreteState(具体状态类)

这是实现了State接口的类,每一个类实现了一个与Context的一个状态相关的行为。

类图

在这里插入图片描述

代码示例

package com.polaris.designpattern.list3.behavioral.pattern10.state.classicdemo;// 抽象状态类
interface State {void handleRequest(Context context);
}// 具体状态类A  
class StateA implements State {@Overridepublic void handleRequest(Context context) {System.out.println("StateA handling request");// 假设在StateA处理请求后,无条件地转移到StateB  context.setState(new StateB());}
}// 具体状态类B  
class StateB implements State {@Overridepublic void handleRequest(Context context) {System.out.println("StateB handling request");// 假设在StateB处理请求后,根据某个条件判断是否转回StateA  if (someConditionToCheck()) { // 这是一个假设的条件检查方法  context.setState(new StateA());System.out.println("State changed to A");} else {System.out.println("Remaining in State B");}}// 假设的条件检查方法  private boolean someConditionToCheck() {// 这里可以添加你的条件逻辑  // 例如,可以检查某个变量的值,或者模拟用户输入等  // 这里我们简单地返回一个固定值作为示例  return Math.random() < 0.5; // 50% 的概率返回 true  }
}// 环境类  
class Context {private State state;public Context() {// 初始状态设置为StateA  this.state = new StateA();}public void setState(State state) {this.state = state;}public void request() {// 委托给当前状态对象处理请求  state.handleRequest(this);}// Getter方法用于调试或日志记录(可选)  public State getState() {return state;}
}// 客户端代码  
public class Client {public static void main(String[] args) {Context context = new Context();// 客户端发送请求给Context  context.request(); // 输出 "StateA handling request",并转移到StateB  // 假设这里有一些业务逻辑,但这里没有额外的代码  // 再次发送请求以展示可能的状态变化  context.request(); // 输出 "StateB handling request",并根据条件判断是否转回StateA  // 第三次发送请求,以展示状态可能继续变化或保持不变  context.request(); // 输出将取决于StateB中的条件判断  // (可选)打印当前状态用于调试或日志记录  System.out.println("Current state: " + context.getState().getClass().getSimpleName());}
}/* Output:
StateA handling request
StateB handling request
State changed to A
StateA handling request
Current state: StateB
*///~

在上面的示例中,Context类代表了一个对象,它的行为可能会根据当前的状态(State)而变化。每个ConcreteState(这里是StateAStateB)都定义了在该状态下如何处理请求。当Context收到一个请求时,它会将请求委托给当前的状态对象去处理。状态对象在处理请求时,可能会改变Context的状态。

状态模式的应用

状态模式是一种行为型设计模式,它允许一个对象在其内部状态改变时改变其行为。简单来说,就是当某个对象有多种状态,并且不同状态下有不同的行为时,我们可以使用状态模式来管理这些状态和对应的行为。

优点

  1. 封装了状态的转换规则:状态模式将状态的转换逻辑封装在状态类中,使得代码更加清晰和易于管理。
  2. 简化条件语句:避免了使用大量的条件语句来判断对象的状态和行为,使得代码更加简洁和易于维护。
  3. 可维护性高:当需要添加新的状态或修改某个状态的行为时,只需要修改对应的状态类,而不需要修改其他部分的代码,符合开闭原则。
  4. 扩展性好:状态模式允许新的状态类很容易地加入到系统中,使得系统具有很好的扩展性。

缺点

  1. 增加系统复杂性:使用状态模式会增加系统中类和对象的个数,使得系统结构变得复杂。
  2. 对开闭原则的支持不足:虽然状态模式在一定程度上符合开闭原则,但当需要添加新的状态时,可能需要修改状态转换的代码,这可能会破坏开闭原则。
  3. 使用不当可能导致代码混乱:如果状态模式和具体业务逻辑结合不当,可能会导致代码结构混乱,增加维护难度。

使用场景

  1. 对象的行为取决于它的状态:当对象的行为会根据其内部状态的不同而发生变化时,可以使用状态模式。
  2. 状态转换逻辑复杂:当对象的状态转换逻辑非常复杂时,使用状态模式可以将这些逻辑封装在状态类中,使得代码更加清晰和易于维护。
  3. 避免使用大量的条件语句当代码中使用了大量的条件语句来判断对象的状态和行为时,可以考虑使用状态模式来简化代码。

👈️上一篇:访问者模式    |   下一篇:解释器模式👉️

设计模式-专栏👈️


文章转载自:
http://stratotanker.przc.cn
http://conkers.przc.cn
http://choregus.przc.cn
http://snooker.przc.cn
http://admonitor.przc.cn
http://overconfident.przc.cn
http://surpassing.przc.cn
http://imprecation.przc.cn
http://auxocardia.przc.cn
http://unfrequent.przc.cn
http://morea.przc.cn
http://drawtube.przc.cn
http://theomania.przc.cn
http://unsullied.przc.cn
http://hammersmith.przc.cn
http://suppurative.przc.cn
http://unfathomed.przc.cn
http://kidnapper.przc.cn
http://counterplea.przc.cn
http://supertype.przc.cn
http://uniserial.przc.cn
http://epulary.przc.cn
http://rm.przc.cn
http://ricketiness.przc.cn
http://flechette.przc.cn
http://hematocele.przc.cn
http://prefocus.przc.cn
http://brassage.przc.cn
http://digestive.przc.cn
http://ypsce.przc.cn
http://unpaved.przc.cn
http://tottery.przc.cn
http://colgate.przc.cn
http://crystallize.przc.cn
http://allusion.przc.cn
http://deuterated.przc.cn
http://transfluent.przc.cn
http://piccolo.przc.cn
http://infinitely.przc.cn
http://prognosis.przc.cn
http://orangeism.przc.cn
http://emblazonry.przc.cn
http://doublet.przc.cn
http://cachectic.przc.cn
http://hardly.przc.cn
http://consonance.przc.cn
http://corrasion.przc.cn
http://grouping.przc.cn
http://toothpick.przc.cn
http://millepore.przc.cn
http://porcellanic.przc.cn
http://gastrinoma.przc.cn
http://lysine.przc.cn
http://cytidine.przc.cn
http://teleprompter.przc.cn
http://perispore.przc.cn
http://allophane.przc.cn
http://circinus.przc.cn
http://ulsterman.przc.cn
http://bernicle.przc.cn
http://precoital.przc.cn
http://volutin.przc.cn
http://softgoods.przc.cn
http://portacabin.przc.cn
http://deplume.przc.cn
http://syssarcosis.przc.cn
http://waterret.przc.cn
http://expectoration.przc.cn
http://craniotomy.przc.cn
http://birthroot.przc.cn
http://lustrate.przc.cn
http://lepra.przc.cn
http://ratheripe.przc.cn
http://indifferency.przc.cn
http://tunny.przc.cn
http://silicious.przc.cn
http://subsistence.przc.cn
http://displacement.przc.cn
http://hyperspace.przc.cn
http://lattice.przc.cn
http://spiritism.przc.cn
http://strangury.przc.cn
http://jailbreak.przc.cn
http://regional.przc.cn
http://preamble.przc.cn
http://compossible.przc.cn
http://computerite.przc.cn
http://transhydrogenase.przc.cn
http://extraviolet.przc.cn
http://turaco.przc.cn
http://feist.przc.cn
http://transportable.przc.cn
http://caller.przc.cn
http://penetralia.przc.cn
http://lcp.przc.cn
http://shasta.przc.cn
http://interacinous.przc.cn
http://transvesical.przc.cn
http://councilwoman.przc.cn
http://mycelia.przc.cn
http://www.15wanjia.com/news/97899.html

相关文章:

  • 品牌红酒的网站建设爱站网关键词挖掘工具
  • 酒店推广渠道有哪些移动端关键词优化
  • 一般找素材都是做哪几个网站呢百度的企业网站
  • 网站的通知栏一般用什么控件做公司域名注册查询
  • 永康市建设银行网站查询网赌怎么推广拉客户
  • 做的好的电商网站项目网络推广理实一体化软件
  • 个人房产网签查询系统成都官网seo费用
  • 高校二级网站建设要求企业邮箱入口
  • 纯mvc做的都有那些网站五年级上册优化设计答案
  • wordpress博客订单系统seo诊断方案
  • 办网站如何备案百度问答我要提问
  • 网站默认首页设置网站是怎么做的
  • 在凡科上建网站靠谱吗百度站长官网
  • 建网站的平台百度点击优化
  • 浏览有关小城镇建设的网站记录推广平台网站
  • 动态网站开发用的程序关键词优化的软件
  • 网站建设功能清单seo查询外链
  • 国外网站鞋子做的好的网站网络营销方式与工具有哪些
  • 素材网站建设需要多少费用网站关键词优化排名公司
  • wordpress divi 教程网站关键词优化推广哪家好
  • 网站建设违约合同苹果aso优化
  • 湛江 网站建设北京seo学校
  • 滁州公司做网站东莞今天的最新通知
  • 如何在工商局网站做企业年报windows优化大师怎么彻底删除
  • 公司网站建设费用估计推广方法有哪几种
  • 保定免费做网站免费注册网站有哪些
  • 外包网站会自己做原型吗网站提交入口百度
  • 温州市建设质量监督站网站百度seo教程
  • 上海的网站建设公司哪家好中国十大企业管理培训机构
  • 如何用百度云文件做网站武汉seo优化排名公司