基于ET的设计模式 二

状态模式(State)

公司目前项目做一款挂机卡牌游戏,核心战斗中角色的管理,场景的管理,都用到了状态模式。
状态模式是设计模式中,游戏开发最常用也是最重要的模式。

状态模式有三要素:
Context:拥有状态的类。
State:状态模式的基类。
ConcreteState:具体状态。

举个例子:一个手机的网络状态,
Context:手机的网络
State: 未连接,连接中 ,已连接。
ConcreteState:State 对应的图标。


image.png

状态过度:未连接 ---> 连接中 ---> 已连接。(因为就算是光速也需要时间)

可以是枚举,懒得写了, 1 ,2,3 对应:未连接,连接中 ,已连接

现在是敲代码时间:

Phone.cs

  public class Phone :Entity
  {
      State mState = null;
  }
 
  public void Request(int cValue)
  {
      mState.Handle(cValue);
  }

  public void SetState(State cState)
  {
      mState=cState;    
  }


State.cs

public abstract class State
{
    Context mContext = null;
    public State (Context cContext)
    {
        mContext  = cContext;
    }

    public abstract void Handle(int cValue);
}

public class ConcreteState01 : State
{
    public override void Handle(int cValue)
    {
        //这里是状态过度,由 1 到 2 
        if(cValue == 2)
        {
              // ConcreteState02 是连接中
              mContext.SetState(New ConcreteState02(mContext) )
        }            
    }
}

...


以上3个具体类,都需要重新定义 Handle ,用来区分具体的 显示WIFI图标。这里就省略了。

void test()
{

    Phone tPhone = new Phone();
    tPhone .SetState(New ConcreteState01());

    if(xxx) //这里是业务逻辑,比如:这个电话目前断网,刚有信号 
    tPhone.Request(2);

}


ET里边真实项目用到最多的就是FSM。网上我看有很多人都实现过,回头找到一个好的版本贴到这里。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 外观模式 : 迪米特法则(最少知识原则) : 一个软件实体应当尽可能少的与其他实体发送相互作用. 外观模式核心 :...
    小小一技术驿站阅读 126评论 0 0
  • 一、前言 国庆假期前参加了第十五次设计模式研讨会,主题是状态模式,接下来我们来看看该模式的具体内容。 二、状态模式...
    天上下橙雨阅读 210评论 0 0
  • 一个对象的行为取决于一个或者多个状态的属性变化,这样的属性称为状态,这个对象称为有状态的对象,对象的状态一般都是事...
    程序员札记阅读 57评论 0 1
  • 学习设计模式不是一蹴而就的事情,需要长时间的积累,在平时写代码的时候多思考,学习设计模式的时候也不要死记硬背,要了...
    tanghomvee阅读 1,542评论 0 2
  • 五、行为型模式 行为模式主要是根据具体的场景描述各个对象之间的相互关系和职责和通信方式。 5.1 模板方法模式 定...
    想54256阅读 219评论 0 0