using UnityEngine;
using System.Collections;
namespace StateStructure
{
public class StateStructure : MonoBehaviour
{
void Start ( )
{
// 设置初始状态
Context c = new Context(new ConcreteStateA());
// 切换状态
c.Request();
c.Request();
c.Request();
c.Request();
}
}
/// <summary>
/// The 'State' abstract class
/// </summary>
abstract class State
{
public abstract void Handle(Context context);
}
/// <summary>
/// A 'ConcreteState' class
/// </summary>
class ConcreteStateA : State
{
public override void Handle(Context context)
{
context.State = new ConcreteStateB();
}
}
/// <summary>
/// A 'ConcreteState' class
/// </summary>
class ConcreteStateB : State
{
public override void Handle(Context context)
{
context.State = new ConcreteStateA();
}
}
/// <summary>
/// The 'Context' class
/// </summary>
class Context
{
private State _state;
// Constructor
public Context(State state)
{
this.State = state;
}
// Gets or sets the state
public State State
{
get { return _state; }
set
{
_state = value;
Debug.Log("State: " +_state.GetType().Name);
}
}
public void Request()
{
_state.Handle(this);
}
}
}