设计模式---状态模式(DesignPattern_State)

简介: 摘录自:设计模式与游戏完美开发十年磨一剑,作者将设计模式理论巧妙地融入到实践中,以一个游戏的完整实现呈现设计模式的应用及经验的传承 《轩辕剑》之父——蔡明宏、资深游戏制作人——李佳泽、Product Evangelist at Unity T...

摘录自:设计模式与游戏完美开发

十年磨一剑,作者将设计模式理论巧妙地融入到实践中,以一个游戏的完整实现呈现设计模式的应用及经验的传承 《轩辕剑》之父——蔡明宏、资深游戏制作人——李佳泽、Product Evangelist at Unity Technologies——Kelvin Lo、信仁软件设计创办人—— 赖信仁、资深3D游戏美术——刘明恺 联合推荐全书采用了整合式的项目教学,即以一个游戏的范例来应用23种设计模式的实现贯穿全书,让读者学习到整个游戏开发的全过程和作者想要传承的经验,并以浅显易懂的比喻来解析难以理解的设计模式,让想深入了解此领域的读者更加容易上手。

工程GitHub

源码注释及命名有所更改,个人感觉会比原版更好理解

  • 状态模式:状态模式允许一个对象在其内部状态改变的时候改变行为。这个对象看上去象是改变了它的类一样。状态模式把所研究的对象的行为包装在不同的状态对象里,每一个状态对象都属于一个抽象状态类的一个子类。状态模式的意图是让一个对象在其内部状态改变的时候,其行为也随之改变。状态模式需要对每一个系统可能取得的状态创立一个状态类的子类。当系统的状态变化时,系统便改变所选的子类。
  • 一般用于场景切换,因为场景数量有限,而且在场景载入 、运行、退出相关操作流程类似

STATE—跟MM交往时,一定要注意她的状态哦,在不同的状态时她的行为会有不同,比如你约她今天晚上去看电影,对你没兴趣的MM就会说“有事情啦”,对你不讨厌但还没喜欢上的MM就会说“好啊,不过可以带上我同事么?”,已经喜欢上你的MM就会说“几点钟?看完电影再去泡吧怎么样?”,当然你看电影过程中表现良好的话,也可以把MM的状态从不讨厌不喜欢变成喜欢哦。

using UnityEngine;
using System.Collections;

namespace DesignPattern_State
{

    // 内涵一种状态,并且对相关状态的操作
    public class StateController
    {
        State   m_State = null;

        public void Request(int Value)
        {
            m_State.Handle(Value);
        }

        public void SetState(State theState )
        {
            Debug.Log ("StateController.SetState:" + theState);
            m_State = theState;
        }
    }

    // 状态的抽象类,继承他的子类重写相关操作
    public abstract class State
    {
        protected StateController m_Controller = null;

        public State(StateController theController)
        {
            m_Controller = theController;
        }           
        public abstract void Handle(int Value);
    }

    // 实例状态 A
    public class ConcreteStateA : State
    {
        public ConcreteStateA( StateController theController):base(theController)
        {}

        public override void Handle (int Value)
        {
            Debug.Log ("ConcreteStateA.Handle");
            if( Value > 10)
                m_Controller.SetState( new ConcreteStateB(m_Controller));
        }

    }

    // 实例状态 B
    public class ConcreteStateB : State
    {
        public ConcreteStateB( StateController theController):base(theController)
        {}
        
        public override void Handle (int Value)
        {
            Debug.Log ("ConcreteStateB.Handle");
            if( Value > 20)
                m_Controller.SetState( new ConcreteStateC(m_Controller));
        }
        
    }

    // 实例状态 C
    public class ConcreteStateC : State
    {
        public ConcreteStateC( StateController theController):base(theController)
        {}
        
        public override void Handle (int Value)
        {
            Debug.Log ("ConcreteStateC.Handle");
            if( Value > 30)
                m_Controller.SetState( new ConcreteStateA(m_Controller));
        }       
    }


}
using UnityEngine;
using System.Collections;
using DesignPattern_State;

public class StateTest : MonoBehaviour {

    // Use this for initialization
    void Start () {
        UnitTest(); 
    }
    
    // 
    void UnitTest () 
    {
        StateController theController = new StateController();
        theController.SetState( new ConcreteStateA( theController ));
        theController.Request( 5 );
        theController.Request( 15 );
        theController.Request( 25 );
        theController.Request( 35 );

    }
}
相关文章
|
7天前
|
设计模式 Java
23种设计模式,状态模式的概念优缺点以及JAVA代码举例
【4月更文挑战第9天】状态模式是一种行为设计模式,允许一个对象在其内部状态改变时改变它的行为,这个对象看起来似乎修改了它的类。
24 4
|
4月前
|
设计模式 Java 开发者
Java设计模式【二十一】:状态模式
Java设计模式【二十一】:状态模式
23 0
|
1月前
|
设计模式
【设计模式】状态模式
【设计模式】状态模式
|
2月前
|
设计模式 Java 测试技术
浅谈设计模式 - 状态模式(十三)
浅谈设计模式 - 状态模式(十三)
15 0
|
3月前
|
设计模式 程序员
设计模式-状态模式(State)
设计模式-状态模式(State)
35 0
|
3月前
|
设计模式 Java
聊聊Java设计模式-状态模式
状态模式(State Pattern)指允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。
51 1
|
3月前
|
设计模式 Go 开发工具
Golang设计模式——14状态模式
Golang设计模式——14状态模式
25 0
|
3月前
|
设计模式 前端开发
【设计模式】之状态模式
状态模式是一种非常有用的设计模式,在前端开发中经常用于管理应用状态和处理复杂的流程。它通过将对象行为和属性与特定条件下的处理逻辑分离开来,提高了代码的可维护性和可扩展性。通过使用状态模式,我们可以优雅地管理应用状态,并根据不同的条件来改变对象行为。然而,在应用状态模式时需要权衡其带来的优缺点,并根据具体情况进行选择。
37 1
|
8月前
|
设计模式
设计模式-行为型模式:状态模式
设计模式-行为型模式:状态模式
|
4月前
|
设计模式
二十三种设计模式全面解析-深入探讨状态模式的高级应用技术:释放对象行为的无限可能
二十三种设计模式全面解析-深入探讨状态模式的高级应用技术:释放对象行为的无限可能