State Pattern 의 장단점
간단하게 쿠키런을 예시로 상태 패턴을 이용 해보려고 한다.
Jump, Run. Dead 세 가지 상태가 있을 것이다.
이를 토대로 코드를 만들어보았다.
public interface ICookieState
{
    public void Handle(CookieController cookieController);
}
public class CookieController : MonoBehaviour
{
    private float speed;
    private int curHp;
    private int maxHp;
    private CookieContext cookieContext;
    private ICookieState jumpState, deadState, runState;
    // example
    public void Jump()
    {
        cookieContext.Transition(jumpState);
        cookieContext.Transition();
    }
    public void Dead()
    {
        cookieContext.Transition(deadState);
        cookieContext.Transition();
    }
    public void Run()
    {
        cookieContext.Transition(runState);
        cookieContext.Transition();
    }
    private void Start()
    {
        Run();
    }
}
public class Jump : MonoBehaviour, ICookieState
{
    private CookieController _cookieController;
    public void Handle(CookieController cookieController)
    {
        if (!_cookieController)
            _cookieController = cookieController;
        // junp funtions........
        // something funtions.......
    }
}
public class Dead : MonoBehaviour, ICookieState
{
    private CookieController _cookieController;
    public void Handle(CookieController cookieController)
    {
        if (!_cookieController)
            _cookieController = cookieController;
        // dead funtions........
        // something funtions.......
    }
}
public class Run : MonoBehaviour, ICookieState
{
    private CookieController _cookieController;
    public void Handle(CookieController cookieController)
    {
        if (!_cookieController)
            _cookieController = cookieController;
        // run funtions........
        // something funtions.......
    }
}
public class CookieContext : MonoBehaviour
{
    public ICookieState curCookieState { get; set; }
    // Play
    public void Transition()
    {
        curCookieState.Handle();
    }
    // Transition
    public void Transition(ICookieState toState)
    {
        curCookieState = toState;
    }
}
대안

