一、功能:
實現 獲取資料 —>根據使用者訂閱清單進行推送 —> 這裡的推送方式:QQ、Email、App、外掛等等
使用者可多選推送方式。
二、實現
1、推送方式—列舉(位運算):
[Flags] public enum PushType { QQ = 0, Email = 2 }
2、策略模式:抽象推送策略
public interface IPush { bool Push(object data); }
3、QQ推送+Email推送
QQ推送:單例模式—靜態建立QQ推送服務,執行緒安全。
public class QQ : IPush { QQ() { } private static QQ _instance = new QQ(); public static QQ GetInstance() { return _instance; } public bool Push(object data) { Console.WriteLine("QQ 推送服務開啟,正在推送..."); Console.WriteLine("QQ 推送成功."); return true; } }
Email推送:
public class Email:IPush { public bool Push(object data) { Console.WriteLine("郵件 推送服務開啟,正在推送..."); Console.WriteLine("郵件 推送成功."); return true; } }
4、簡單工廠模式建立具體的服務型別
public static class PushServiceFactory { public static IPush Creat(PushType type) { IPush pushService = null; switch (type) { case PushType.QQ: pushService = QQ.GetInstance(); break; case PushType.Email: pushService = new Email(); break; } return pushService; } }
5、主題:推送服務
獲取訂閱清單、處理資料、推送.
當然這裡的推送,是根據使用者勾選的推送方式(List<PushType> types)進行遍歷推送.
public class PushProvider { public object GetUserSubscribedData(string userid) { Console.WriteLine("獲取訂閱清單"); return new object(); } public object HandleData(List<object> data) { Console.WriteLine("處理資料"); return new object(); } public void ExcutePush(object data, List<PushType> types) { Console.WriteLine("推送資料"); foreach (PushType type in types) { IPush pushService = PushServiceFactory.Creat(type); pushService.Push(data); } } }
6、呼叫
class Program { static void Main(string[] args) { //使用者勾選訂閱方式 List<PushStategy.PushType> pushTypes = new List<PushStategy.PushType>() { PushStategy.PushType.Email }; //假定:系統需推送的資料 List<object> resourceData = new List<object>(); PushProvider service = new PushProvider(); //獲取使用者清單 object userSubscriptData= service.GetUserSubscribedData("GetDataFromUserID"); //根據系統資料,篩選出使用者資料 object result = service.HandleData(resourceData); //將篩選資料推送至使用者 service.ExcutePush(result, pushTypes); Console.ReadKey(); } }
7、結語
通過單例模式重新認知了靜態、例項以及多執行緒,由多執行緒又重新梳理了記憶體分配。下篇總結一下。