c#使用状态模式+反射+特性,替代switch case
大概思路为: 特性标记类,通过标记在程序集中筛选,注册到映射表中,即可通过类名得到对应的类对象(只创建一次)
特性:
namespace July {
public class GameSceneStateAttribute : Attribute
{
}
}
状态接口:
namespace July {
public interface JState
{
string StateName {
get; }
void OnEnterState();
void OnExitState();
}
}
状态具体类1:
namespace July {
[GameSceneState]//标记
public class JState_LoadScene : JState
{
public string StateName {
get {
return JGameSceneConfig.LoadScene; } }
public void OnEnterState()
{
JDebug.Log("场景进入: "+ StateName);
}
public void OnExitState()
{
JDebug.Log("场景退出: " + StateName);
}
}
}
状态具体类2:
namespace July{
[GameSceneState