当前位置: 首页 > news >正文

网站建设 本溪红海传媒建设网站方面的知识

网站建设 本溪红海传媒,建设网站方面的知识,织梦网站footer美化,莱钢吧贴吧一#xff1a;现实场景 有时候在开发的过程中#xff0c;我们经常会根据某个状态的值#xff0c;写出很多的ifelse逻辑#xff0c;比如拿项目里面的案例来说#xff0c;如果当前发送的是彩信#xff0c;此种状态需要如何给实体赋值#xff0c;如果是短信#xff0c;邮件…一现实场景 有时候在开发的过程中我们经常会根据某个状态的值写出很多的ifelse逻辑比如拿项目里面的案例来说如果当前发送的是彩信此种状态需要如何给实体赋值如果是短信邮件又是其他方式的赋值等等此类这种情况下一般会写出如下if判断对吧真实代码如下 if (leaflet.CommunicationtypeEnum.HasFlag(CommunicationTypeEnum.邮件)) { //第三步动态生成邮件模板 var styleInfo CacheUtil.GetRandomEmailStyle(); var tuple new EdmDraftBoxBLL().GetEdmHtmlTitle(communicationInfo.EDMJson, styleInfo.StyleId); leaflet.Title tuple.Item1; leaflet.EDMContent tuple.Item2; leaflet.Header tuple.Item3; leaflet.SendSMSCount 1; } if (leaflet.CommunicationtypeEnum.HasFlag(CommunicationTypeEnum.短信)) { leaflet.SMSContent communicationInfo.SMSContent; leaflet.SendSMSCount communicationInfo.SMSCount; } if (leaflet.CommunicationtypeEnum.HasFlag(CommunicationTypeEnum.彩信)) { leaflet.MMSContent communicationInfo.MMSContent; } 上面的代码还是非常简单明了的程序会根据leaflet.CommunicationtypeEnum的不同做不同的判断比如说当前状态是邮件的话程序会从30套邮件 模板库中随机抽取一封给leaflet的titleheader...赋值有些人可能会说这段代码不难看哈确实是这样但是如果面对需求变更呢比如说后期需要增加微信微博渠道那是不是又要加上两个if才能把这个问题解决呢 这就违背了设计模式中开闭原则对吧面对这种场景可以用责任链模式摆平。 二责任链模式 责任链模式讲的就是将请求的发送者和接收者进行分离避免请求发送者与接收者耦合在一起让多个对象都有可能接收请求将这些对象连接成一条链并且沿着这条链传递请求直到有对象处理它为止面对需求变更只需要更加处理类就好了而且客户端可以按照自己的需求拼接处理链条是不是很强大。 1. AbstractComunication public abstract class AbstractComunication { AbstractComunication abstractComunication null; public void SetHandler(AbstractComunication abstractComunication) { this.abstractComunication abstractComunication; } public abstract void HanderRequest(LeafletEntity leaflet, EventmarketingSmsEdmContentInfo communicationInfo); } 2. MMSComunication public class MMSComunication : AbstractComunication { public override void HanderRequest(LeafletEntity leaflet, EventmarketingSmsEdmContentInfo communicationInfo) { if (leaflet.CommunicationtypeEnum.HasFlag(CommunicationTypeEnum.彩信)) { leaflet.MMSContent communicationInfo.MMSContent; } else { abstractComunication.HanderRequest(leaflet, communicationInfo); } } } 3.EDMComunication public class EDMComunication : AbstractComunication { public override void HanderRequest(LeafletEntity leaflet, EventmarketingSmsEdmContentInfo communicationInfo) { if (leaflet.CommunicationtypeEnum.HasFlag(CommunicationTypeEnum.邮件)) { //第三步动态生成邮件模板 var styleInfo CacheUtil.GetRandomEmailStyle(); var tuple new EdmDraftBoxBLL().GetEdmHtmlTitle(communicationInfo.EDMJson, styleInfo.StyleId); leaflet.Title tuple.Item1; leaflet.EDMContent tuple.Item2; leaflet.Header tuple.Item3; leaflet.SendSMSCount 1; } else { abstractComunication.HanderRequest(leaflet, communicationInfo); } } } 4.SMSComunication public class SMSComunication : AbstractComunication { public override void HanderRequest(LeafletEntity leaflet, EventmarketingSmsEdmContentInfo communicationInfo) { if (leaflet.CommunicationtypeEnum.HasFlag(CommunicationTypeEnum.短信)) { leaflet.SMSContent communicationInfo.SMSContent; leaflet.SendSMSCount communicationInfo.SMSCount; } else { abstractComunication.HanderRequest(leaflet, communicationInfo); } } } 5.客户端调用 AbstractComunication communication1 new EDMComunication(); AbstractComunication communication2 new SMSComunication(); AbstractComunication communication3 new MMSComunication(); //手工将三个Comunication 凭借成一个链条形成单链表的模型 communication1.SetHandler(communication2); communication2.SetHandler(communication3); communication1.HanderRequest(leaflet, communicationInfo); 其实上面的代码需要绕一下脑子的就是如何通过SetHandler将三个xxxComunication拼接成一个单链表的形式链表怎么拼接在于客户端如何设置sethandler 灵活性完全就在客户端这边然后就非常方便将leaflet在责任链中游走最终会被某一状态处理逻辑处理讲到这里我想大家应该都知道责任链模式是干嘛的了 由于是真实案例就不方便跑代码了下面我构建一个责任链模型大家比照一下就可以了是不是有种请求和处理的分离而且我还可以根据需要组合我的责任链 其实js的冒泡机制就是这种模式的一个体现。 public abstract class AbstractHandler { protected AbstractHandler abstractHandler null; public void SetHandler(AbstractHandler abstractHandler) { this.abstractHandler abstractHandler; } public virtual void HandleRequest(int request) { } } public class ConcreteHandler1 : AbstractHandler { public override void HandleRequest(int request) { if (request 1) { Console.WriteLine(handler1 给你处理了); } else { abstractHandler.HandleRequest(request); } } } public class ConcreteHandler2 : AbstractHandler { public override void HandleRequest(int request) { if (request 2) { Console.WriteLine(handler2 给你处理了); } else { abstractHandler.HandleRequest(request); } } } public class ConcreteHandler3 : AbstractHandler { public override void HandleRequest(int request) { if (request 3) { Console.WriteLine(handler3 给你处理了); } else { abstractHandler.HandleRequest(request); } } } class Program { static void Main(string[] args) { AbstractHandler hander1 new ConcreteHandler1(); AbstractHandler hander2 new ConcreteHandler2(); AbstractHandler hander3 new ConcreteHandler3(); hander1.SetHandler(hander2); hander2.SetHandler(hander3); hander1.HandleRequest(3); } } 好了模板和实际项目的案例都给大家展示了希望能帮助到你 相关文章; 从真实项目中抠出来的设计模式——第一篇策略模式从真实项目中抠出来的设计模式——第二篇过滤器模式 原文地址http://www.cnblogs.com/huangxincheng/p/6429284.html.NET社区新闻深度好文微信中搜索dotNET跨平台或扫描二维码关注
http://www.pierceye.com/news/573099/

相关文章:

  • 国投集团网站开发杭州网站界面设计
  • 做关于什么的网站莆田网站建设解决方案
  • 湖南长沙做网站那些网站可以做反链
  • 成都金牛网站建设公司高端网站配色
  • 做喜报的网站设计师的工作内容
  • 济南网站建设工作wordpress 资讯
  • 网站调用数据库平台公司名单
  • 移动网站怎么做成都设计公司名字
  • 杭州最好的网站设计公司服务器域名解析
  • 做试用网站的原理塘沽网吧开门了吗
  • 网站域名的作用古典网站源码
  • 做直播网站软件有哪些软件涿州网站建设有限公司
  • 易托管建站工具wordpress多个single
  • 建一个电影网站多大 数据库半厘米wordpress
  • 住房和建设厅网站首页网站源码怎么写
  • 宁波新亚建设公司网站简单网站建设
  • 做网站没赚到钱网站后台地址忘记了
  • 备案网站公共查询安阳县
  • wordpress 超级管理员seo优化网络公司
  • 商务推广网站宝塔做网站
  • 我想建一个网站怎么建python做的大型网站
  • 为网站设计手机版wordpress怎样比较安全
  • 网站优化方式重庆建设网站哪家专业
  • php做网站基本流程旅游网站论文
  • 网站前期准备网页制作需要学多久
  • 广园路建设公司网站建app网站要多少钱
  • 网站域名是什么东西wordpress农历插件
  • 专业网站建设公司首选公司wordpress fruitful
  • 微博wap版登录入口seo 网站标题长度
  • 网站面包屑导航设计即位置导航局域网安装wordpress