设计模式---状态模式(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 );

    }
}
相关文章
|
6月前
|
设计模式
设计模式之 State(状态模式)
设计模式之 State(状态模式)
37 0
|
2月前
|
设计模式 Java 测试技术
Java设计模式-状态模式(18)
Java设计模式-状态模式(18)
|
3月前
|
设计模式 网络协议 Java
【十五】设计模式~~~行为型模式~~~状态模式(Java)
文章详细介绍了状态模式(State Pattern),这是一种对象行为型模式,用于处理对象在其内部状态改变时的行为变化。文中通过案例分析,如银行账户状态管理和屏幕放大镜工具,展示了状态模式的应用场景和设计方法。文章阐述了状态模式的动机、定义、结构、优点、缺点以及适用情况,并提供了Java代码实现和测试结果。状态模式通过将对象的状态和行为封装在独立的状态类中,提高了系统的可扩展性和可维护性。
【十五】设计模式~~~行为型模式~~~状态模式(Java)
|
4月前
|
设计模式 JavaScript Go
js设计模式【详解】—— 状态模式
js设计模式【详解】—— 状态模式
76 7
|
5月前
|
设计模式
状态模式-大话设计模式
状态模式-大话设计模式
|
5月前
|
设计模式 存储
行为设计模式之状态模式
行为设计模式之状态模式
|
6月前
|
设计模式 Go
[设计模式 Go实现] 行为型~状态模式
[设计模式 Go实现] 行为型~状态模式
|
6月前
|
设计模式 Java
23种设计模式,状态模式的概念优缺点以及JAVA代码举例
【4月更文挑战第9天】状态模式是一种行为设计模式,允许一个对象在其内部状态改变时改变它的行为,这个对象看起来似乎修改了它的类。
56 4
|
6月前
|
设计模式 JavaScript Java
[设计模式Java实现附plantuml源码~行为型] 对象状态及其转换——状态模式
[设计模式Java实现附plantuml源码~行为型] 对象状态及其转换——状态模式
|
6月前
|
设计模式 Java
【设计模式系列笔记】状态模式
在Java中,状态模式是一种行为设计模式,它允许对象在其内部状态改变时改变其行为。状态模式的关键思想是将对象的状态封装成独立的类,并将对象的行为委托给当前状态的对象。这样,当对象的状态发生变化时,其行为也会相应地发生变化。
65 0