脫離了博弈產業後,前往線上教育業
線上教育業有一個很固定的商業模式,成為會員前都會有一種固定的歷程
留單>預約體驗>客戶
然後有看到一段code使用狀態模式來實作
狀態模式其實跟策略模式一樣,也是要把每個實作的類別切開
只是狀態模式是可以封裝轉換規則
using System; namespace ConsoleApp1 { class Program { static void Main(string[] args) { //留單 var member1 = new Member { Status = 1 }; member1.Action(); //預約體驗 var member2 = new Member { Status = 2 }; member2.Action(); //客戶 var member3 = new Member { Status = 3 }; member3.Action(); Console.Read(); } } public sealed class Member { private IState current; public int Status { get; set; } public Member() { current = new 留單結構(); } public void SetState(IState state) { current = state; } public void Action() { current.Process(this); } } public interface IState { void Process(Member member); } public sealed class 留單結構 : IState { void IState.Process(Member member) { if (member.Status == 1) { member.SetState(new 留單實作()); member.Action(); } else { member.SetState(new 預約體驗結構()); member.Action(); } } } public sealed class 預約體驗結構 : IState { void IState.Process(Member member) { if (member.Status == 2) { member.SetState(new 預約體驗實作()); member.Action(); } else { member.SetState(new 客戶結構()); member.Action(); } } } public sealed class 客戶結構 : IState { void IState.Process(Member member) { if (member.Status == 3) { member.SetState(new 客戶實作()); member.Action(); } else { Console.WriteLine("查無此狀態..."); } } } public class 留單實作 : IState { public void Process(Member member) { Console.WriteLine("留單狀態處理中..."); } } public class 預約體驗實作 : IState { public void Process(Member member) { Console.WriteLine("預約體驗處理中..."); } } public class 客戶實作 : IState { public void Process(Member member) { Console.WriteLine("恭喜你成為我們的客戶..."); } } }這邊會有Member context可以傳入狀態
就會依照當時的Status去實作當下狀態的類別
而實作的部分其實就是策略者模式,而多了結構類別封裝了轉換規則
沒有留言:
張貼留言