策略模式+单例模式+简单工厂模式:推送服务
一、功能:
实现 获取数据 —>根据用户订阅清单进行推送 —> 这里的推送方式: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、结语
通过单例模式重新认知了静态、实例以及多线程,由多线程又重新梳理了内存分配。下篇总结一下。
更多精彩原创心得,请关注微信公众号: 梯形

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?