策略模式+单例模式+简单工厂模式:推送服务
2015-12-17 07:06
555 查看
一、功能:
实现 获取数据 —>根据用户订阅清单进行推送 —> 这里的推送方式:QQ、Email、App、插件等等
用户可多选推送方式。
二、实现
1、推送方式—枚举(位运算):
2、策略模式:抽象推送策略
3、QQ推送+Email推送
QQ推送:单例模式—静态创建QQ推送服务,线程安全。
Email推送:
4、简单工厂模式创建具体的服务类型
5、主题:推送服务
获取订阅清单、处理数据、推送.
当然这里的推送,是根据用户勾选的推送方式(List<PushType> types)进行遍历推送.
6、调用
7、结语
通过单例模式重新认知了静态、实例以及多线程,由多线程又重新梳理了内存分配。下篇总结一下。
实现 获取数据 —>根据用户订阅清单进行推送 —> 这里的推送方式: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、结语
通过单例模式重新认知了静态、实例以及多线程,由多线程又重新梳理了内存分配。下篇总结一下。
相关文章推荐
- Leetcode 49: Group Anagrams
- Leetcode: Contains Duplicate
- 2015-2016-1学期 《信息安全系统设计基础》课程总结
- Leetcode: Minimum Size Subarray Sum
- Spring,Struts2,MyBatis,Activiti,Maven,H2,Tomcat集成(一)——Maven,Tomcat,Spring集成
- Leetcode: Add and Search Word - Data structure design
- Distance between subspacess
- 10008---CSS Background背景
- 介绍几款Python IDE
- AngularJS Best Practices: resource
- 【纯感悟】我眼里的安卓架构师(一)
- 编译器对C函数的名字修饰
- ASA防火墙疑难杂症解答
- Project5&6 Verilog开发流水线CPU
- Is the type of “pointer-to-member-function” different from “pointer-to-function”?
- LeetCode "Maximum Product of Word Lengths"
- 关于大型网站技术演进的思考(二)--存储的瓶颈(2)
- C ++排序函数sort(),qsort()
- iis7设置dz论坛url静态化经验
- android自带标题样式