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

惠州专业做网站公司/重庆优化seo

惠州专业做网站公司,重庆优化seo,网站的内链优化策略,网站架构功能模块及描述状态模式 在状态模式(State Pattern)中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。 在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。 介绍 意图:…

状态模式

在状态模式(State Pattern)中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。

在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象。

介绍

意图:允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类。

主要解决:对象的行为依赖于它的状态(属性),并且可以根据它的状态改变而改变它的相关行为。

何时使用:代码中包含大量与对象状态有关的条件语句。

如何解决:将各种具体的状态类抽象出来。

关键代码:通常命令模式的接口中只有一个方法。而状态模式的接口中有一个或者多个方法。而且,状态模式的实现类的方法,一般返回值,或者是改变实例变量的值。也就是说,状态模式一般和对象的状态有关。实现类的方法有不同的功能,覆盖接口中的方法。状态模式和命令模式一样,也可以用于消除 if...else 等条件选择语句。

优点:

 1、封装了转换规则。

 2、枚举可能的状态,在枚举状态之前需要确定状态种类。

 3、将所有与某个状态有关的行为放到一个类中,并且可以方便地增加新的状态,只需要改变对象状态即可改变对象的行为。

 4、允许状态转换逻辑与状态对象合成一体,而不是某一个巨大的条件语句块。

 5、可以让多个环境对象共享一个状态对象,从而减少系统中对象的个数。

缺点:

 1、状态模式的使用必然会增加系统类和对象的个数。

 2、状态模式的结构与实现都较为复杂,如果使用不当将导致程序结构和代码的混乱。

 3、状态模式对"开闭原则"的支持并不太好,对于可以切换状态的状态模式,增加新的状态类需要修改那些负责状态转换的源代码,否则无法切换到新增状态,而且修改某个状态类的行为也需修改对应类的源代码。

使用场景: 1、行为随状态改变而改变的场景。 2、条件、分支语句的代替者。

注意事项:在行为受状态约束的时候使用状态模式,而且状态不超过 5 个。


结构图:


应用实例: 

using UnityEngine;
using System.Collections;public class TestState : MonoBehaviour {// Use this for initializationvoid Start () {// 设置Context的初始状态为ConcreteStateAContext context = new Context(new ConcreteStateA());// 不断地进行请求,同时更改状态context.Request();context.Request();context.Request();context.Request();}
}/// <summary>
/// Context类,维护一个ConcreteState子类的实例,这个实例定义当前的状态。
/// </summary>
public class Context
{private State state;/// <summary>/// 定义Context的初始状态/// </summary>/// <param name="state"></param>public Context(State state){this.state = state;}/// <summary>/// 可读写的状态属性,用于读取和设置新状态/// </summary>public State State{get { return state; }set { state = value; }}/// <summary>/// 对请求做处理,并设置下一个状态/// </summary>public void Request(){state.Handle(this);}
}/// <summary>
/// 抽象状态类,定义一个接口以封装与Context的一个特定状态相关的行为
/// </summary>
public abstract class State
{public abstract void Handle(Context context);
}/// <summary>
/// 具体状态类,每一个子类实现一个与Context的一个状态相关的行为
/// </summary>
public class ConcreteStateA : State
{/// <summary>/// 设置ConcreteStateA的下一个状态是ConcreteStateB/// </summary>/// <param name="context"></param>public override void Handle(Context context){Debug.Log("当前状态是 A.");context.State = new ConcreteStateB();}
}public class ConcreteStateB : State
{/// <summary>/// 设置ConcreteStateB的下一个状态是ConcreteSateA/// </summary>/// <param name="context"></param>public override void Handle(Context context){Debug.Log("当前状态是 B.");context.State = new ConcreteStateA();}
}

结构图:


应用实例: 电灯有两个状态,开(亮)与关(不亮),下面就用状态模式来实现对电灯的控制。

using UnityEngine;
using System.Collections;public class TestLight : MonoBehaviour {// Use this for initializationvoid Start () {// 初始化电灯,原始状态为关Light light = new Light(new Off());// 第一次按下开关,打开电灯light.PressSwich();// 第二次按下开关,关闭电灯light.PressSwich();}}/// <summary>
/// 电灯类,对应模式中的Context类
/// </summary>
public class Light
{private LightState state;public Light(LightState state){this.state = state;}/// <summary>/// 按下电灯开关/// </summary>public void PressSwich(){state.PressSwich(this);}public LightState State{get { return state; }set { state = value; }}
}/// <summary>
/// 抽象的电灯状态类,相当于State类
/// </summary>
public abstract class LightState
{public abstract void PressSwich(Light light);
}/// <summary>
/// 具体状态类, 开
/// </summary>
public class On : LightState
{/// <summary>/// 在开状态下,按下开关则切换到关的状态。/// </summary>/// <param name="light"></param>public override void PressSwich(Light light){Debug.Log("Turn off the light.");light.State = new Off();}
}/// <summary>
/// 具体状态类,关
/// </summary>
public class Off : LightState
{/// <summary>/// 在关状态下,按下开关则打开电灯。/// </summary>/// <param name="light"></param>public override void PressSwich(Light light){Debug.Log("Turn on the light.");light.State = new On();}
}


http://www.lbrq.cn/news/836281.html

相关文章:

  • 武汉做网站seo/免费发布广告
  • 咸宁网站开发/seo黑帽培训骗局
  • 网站首页备案号链接/谷歌外贸平台推广需要多少钱
  • 河南疫情防控最新消息/太原百度快照优化排名
  • 2013年以前pc网站建设/网络推广优化seo
  • 怎么把wordpress/衡水seo优化
  • 湖南 政府网站信息内容建设/百度推广优化师
  • 网站用什么做备份/百度推广获客
  • dedecms 5.7 通用企业网站模板/企业seo案例
  • 建设银行网站怎样查询贷款信息查询/网络推广项目代理
  • 作品集怎么做网页/seo建站公司推荐
  • 眼睛网站开发/国内搜索引擎排名2022
  • 婚纱摄影的网站怎么做/网络广告是什么
  • 中国建设银行网站-个人客户/如何制作网页
  • 校友会网站建设/seo管理
  • 缤纷网站免费做服装/seo外链怎么做能看到效果
  • 石家庄网站公司/小辉seo
  • 软件开发公司怎么找客户/seo优化的网站
  • b2b网站建设报价/提高工作效率英语
  • 网站开发保密协议模板/纯注册app拉新平台
  • 赣州建网站/seo诊断工具有哪些
  • 深圳注册公司育君财税/高级seo
  • 上线了做网站怎么样/搜索引擎排名优化方案
  • 把网站打包微信小程序/外链信息
  • 网站建设报价明细模板/软件培训班
  • 网站上面的内容里面放照片怎么做的/优化seo报价
  • 如何做网站url优化/品牌运营方案
  • 阿里云 oss做网站/如何快速推广app
  • 扶余市建设局网站/app推广项目从哪接一手
  • 网站建设及推广预算表/惠州网站排名提升
  • 《python语言程序设计》2018版第8章8题编写函数实现二进制转十进制(字符串变整数)!!整数没法进行下标
  • Selector的用法
  • 学习设计模式《十八》——备忘录模式
  • 【推荐100个unity插件】使用C#或者unity实现爬虫爬取静态网页数据——Html Agility Pack (HAP)库和XPath 语法的使用
  • 性能优化实践:Modbus 在高并发场景下的吞吐量提升(二)
  • 直播带货与开源AI智能名片链动2+1模式S2B2C商城小程序:重塑电商营销新格局