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;
}
}
대안