namespace AlicizaX { public interface IProcedure { IProcedureService ProcedureService { get; set; } void Init(); void Enter(); void Leave(); void Update(); void Destroy(); } /// /// 流程基类 - 使用模板方法模式定义流程生命周期 /// public abstract class ProcedureBase : IProcedure { public IProcedureService ProcedureService { get; set; } void IProcedure.Init() { OnInit(); } void IProcedure.Enter() { OnEnter(); } void IProcedure.Leave() { OnLeave(); } void IProcedure.Update() { OnUpdate(); } void IProcedure.Destroy() { OnDestroy(); } protected virtual void OnInit() { } protected virtual void OnEnter() { } protected virtual void OnLeave() { } protected virtual void OnUpdate() { } protected virtual void OnDestroy() { } protected internal void SwitchProcedure() where T : ProcedureBase { AppServices.Require().SwitchProcedure(); } } }