zoukankan      html  css  js  c++  java
  • 【Unity3D与23种设计模式】状态模式(State)

    定义:

    “让一个对象的行为随着内部状态的改变而变化,而该对象也像是换了类一样”

    应用场景:

    角色AI:控制角色在不同状态下的AI行为

    服务器连接状态:开始连线、连线中、断线等状态

    关卡进行状态:不同关卡

    using System;
     using UnityEngine;
    
    public class Context {
         State m_State = null;
    
        public void Request(int Value) {
             m_State.Handle(Value);
         }
    
        public void SetState(State theState) {
             Debug.Log("Context.SetState:" + theState);
             m_State = theState;
         }
     }
    
    public abstract class State {
         protected Context m_Context = null;
         public State(Context theConText) {
             m_Context = theConText;
         }
         public abstract void Handle(int Value);
     }
    
    //状态A
     public class ConcreteStateA : State {
         public ConcreteStateA(Context theContext) : base(theContext) { }
    
        public override void Handle(int Value)
         {
             Debug.Log("ConcreteStateA.Handle");
             if (Value > 10)
                 m_Context.SetState(new ConcreteStateB(m_Context));
         }
     }
    
    //状态B
     public class ConcreteStateB : State {
         public ConcreteStateB(Context theContext) : base(theContext) { }
    
        public override void Handle(int Value)
         {
             Debug.Log("ConcreteStateA.Handle");
             if (Value > 20)
                 m_Context.SetState(new ConcreteStateC(m_Context));
         }
     }
    
    //状态C
     public class ConcreteStateC : State
     {
         public ConcreteStateC(Context theContext) : base(theContext) { }
    
        public override void Handle(int Value)
         {
             Debug.Log("ConcreteStateA.Handle");
             if (Value > 30)
                 m_Context.SetState(new ConcreteStateA(m_Context));
         }
     }

    Context(状态拥有者)

    一个具有状态属性的类,可以制定相关的接口,让外界能够得知状态的改变或通过操作让状态改变

    State(状态接口类)

    制定状态的接口,负责规范Context在特定状态下要表现的行为。

    ConcreteState(具体状态类)

    继承自State,实现Context在特定状态下该有的行为。

    文章整理自书籍《设计模式与游戏完美开发》 菜升达 著

  • 相关阅读:
    jQuery5事件相关
    jQuery4操作表单+属性+样式
    ueditor不能上传mp4格式的视频--解决方案
    笔记本怎么设置WIfi热点
    em rem vw vh
    字体的使用,坑爹啊!
    font的使用
    photoshop简单切图
    HTTP的学习
    call apply bind的联系与区别
  • 原文地址:https://www.cnblogs.com/fws94/p/7161663.html
Copyright © 2011-2022 走看看