通过接口实现两个类通过不同状态的方法调用
具体代码:
using UnityEngine;
public class StatusDesignMode : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
Context context = new Context();
context.SetState(new ConcreteStateA(context));
context.MyHandle(5);
context.MyHandle(50);
context.MyHandle(25);
context.MyHandle(3);
context.MyHandle(5);
}
}
public class Context
{
private IState mState;
public void SetState(IState state)
{
mState = state;
}
public void MyHandle(int arg)
{
mState.Handle(arg);
}
}
public interface IState
{
void Handle(int arg);
}
public class ConcreteStateA : IState
{
private Context mContext;
public ConcreteStateA(Context context)
{
mContext = context;
}
public void Handle(int arg)
{
Debug.Log("run A" + arg);
if (arg > 10)
{
mContext.SetState(new ConcteteStateB(mContext));
}
}
}
public class ConcteteStateB : IState
{
private Context mContext;
public ConcteteStateB(Context context)
{
mContext = context;
}
public void Handle(int arg)
{
Debug.Log("run B" + arg);
if (arg <= 10)
{
mContext.SetState(new ConcreteStateA(mContext));
}
}
}