定义:
允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。对象行为型模式
又名状态对象(Objects for States)
继承实现抽象–聚合父类对象–针对抽象编程–实现代码多态
using UnityEngine;
using System.Collections;
using System;
using SingletonPattern;(引用泛型单例)
namespace StatePattern
{
//继承实现抽象
public abstract class State
{
public abstract void Handle();
}
public class StateA:State
{
public override void Handle()
{
Debug.Log("this is StateA");
}
}
public class StateB:State
{
public override void Handle()
{
Debug.Log("this is StateB");
}
}
public class StateC : State
{
public override void Handle()
{
Debug.Log("this is StateC");
}
}
//聚合抽象对象 针对抽象编程
public class StateManager:Singleton<StateManager>
{
private State _currentState;
public void SetState(State state)
{
_currentState = state;
}
public void DoState()
{
_currentState.Handle();
}
}
//实现代码多态
public class Test
{
public static void Update()
{
if (Input.GetKeyDown(KeyCode.A))
{
StateManager.Instance.SetState(new StateA);
StateManager.Instance.DoState();
}
if (Input.GetKeyDown(KeyCode.B))
{
StateManager.Instance.SetState(new StateB);
StateManager.Instance.DoState();
}
if (Input.GetKeyDown(KeyCode.C))
{
StateManager.Instance.SetState(new StateC);
StateManager.Instance.DoState();
}
}
}
}
用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题
将一个对象的状态从该对象中分离出来,封装到专门的状态类中,使得对象状态可以灵活变化
对于客户端而言,无须关心对象状态的转换以及对象所处的当前状态,无论对于何种状态的对象,客户端都可以一致处理