




已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
软件英才网 软件行业驰名招聘网站设计模式之行为型模式二来自何静媛的博客行为型模式:职责链模式 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止.优点: 当客户提交一个请求时,请求是沿链传递直至有一个ConcreteHandler对象负责处理它. 接收者和发送者都没有对方的明确信息,且链中的对象自己也并不知道链的结构.结果是职责链可简化对象的相互连接,它们仅需保持一个指向其后继者的引用,而不需要保持它所有的候选接收者的引用. 在客户端可以随时地增加或修改处理一个请求的结构,增强了给对象指派职责的灵活性.职责链模式结构图: 没有职责链模式:如图 这样的话我需要自己和公司的每一个层级都发生耦合关系。课本实例:申请加薪代码如下:csharpview plaincopyprint?1. /申请2. classRequest3. 4. /申请类别5. privatestringrequestType;6. publicstringRequestType7. 8. getreturnrequestType;9. setrequestType=value;10. 11. 12. 13. /申请内容14. privatestringrequestContent;15. publicstringRequestContent16. 17. getreturnrequestContent;18. setrequestContent=value;19. 20. 21. /数量22. privateintnumber;23. publicintNumber24. 25. getreturnnumber;26. setnumber=value;27. 28. 29. 30. 31. abstractclassManager32. 33. protectedstringname;34. /管理者的上级35. protectedManagersuperior;36. 37. publicManager(stringname)38. 39. =name;40. 41. /设置管理者的上级42. publicvoidSetSuperior(Managersuperior)43. 44. this.superior=superior;45. 46. /申请请求47. abstractpublicvoidRequestApplications(Requestrequest);48. 49. 50. 51. classCommonManager:Manager52. 53. publicCommonManager(stringname)54. :base(name)55. 56. publicoverridevoidRequestApplications(Requestrequest)57. 58. if(request.RequestType=请假&request.Number=2)59. 60. Console.WriteLine(0:1数量2被批准,name,request.RequestContent,request.Number);61. 62. else63. 64. if(superior!=null)65. superior.RequestApplications(request);66. 67. 68. 69. 70. /总监71. classMajordomo:Manager72. 73. publicMajordomo(stringname)74. :base(name)75. 76. publicoverridevoidRequestApplications(Requestrequest)77. 78. if(request.RequestType=请假&request.Number=5)79. 80. Console.WriteLine(0:1数量2被批准,name,request.RequestContent,request.Number);81. 82. 83. else84. 85. if(superior!=null)86. superior.RequestApplications(request);87. 88. 89. 90. 91. /总经理92. classGeneralManager:Manager93. 94. publicGeneralManager(stringname)95. :base(name)96. 97. publicoverridevoidRequestApplications(Requestrequest)98. 99. if(request.RequestType=请假)100. 101. Console.WriteLine(0:1数量2被批准,name,request.RequestContent,request.Number);102. 103. 104. elseif(request.RequestType=加薪&request.Number500)110. 111. Console.WriteLine(0:1数量2再说吧,name,request.RequestContent,request.Number);112. 113. 解释器模式 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。 如果一个特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可以构建一个解释器,该解释器通过解释这些句子来解决问题 当有一个语言需要解释执行,并且你可将该语言中的句子表示为一个抽象语法树时,可使用解释器模式优点: 很容易地改变和扩展文法,因为该模式使用类来表示文法规则,你可使用继承来改变和扩展该文法。也比较容易实现文法,因为定义抽象语法树中各个节点的类的实现大体类似,这些类都易于直接编写。缺点: 解释器模式为文法中的每一条规则至少定义了一个类,因此包含许多规则的文法可能难以管理和维护。建议当文法非常复杂时,使用其他的技术如语法分析程序或编译器生成器来处理。解释器模式结构图: 中介者模式 用一个中介对象来封装一系列的对象交互。中介者使个对象不需要显式的相互引用,从而使其耦合松散,而且可以独立的改变它们之间的交互优点: 中介者的出现减少了各个colleague的耦合,使得可以独立地改变和复用各个colleague类和中介者。 由于把对象如何协作进行了抽象,将中介者作为一个独立的概念并将其封装在一个对象中,这样关注的对象就从对象各自本身的行为转移到它们之间的交互上来,也就是站在一个更宏观的角度上看待系统。缺点: 由于具体中介者控制了集中化,于是就把交互复杂性变为了中介者的复杂性。 中介者模式一般应用于一组对象以定义良好但是复杂的方式进行通信的场合,以及想定制一个分布在多个类中的行为,而又不想生成太多的子类的场合。中介者模式结构图: 课本实例:美国和伊拉克代码如下:csharpview plaincopyprint?1. /联合国机构2. abstractclassUnitedNations3. 4. publicabstractvoidDeclare(stringmessage,Countrycolleague);5. 6. /联合国安全理事会7. classUnitedNationsSecurityCouncil:UnitedNations8. 9. privateUSAcolleague1;10. /定义一个美国类型的对象11. privateIraqcolleague2;12. 13. /美国14. publicUSAColleague115. setcolleague1=value;16. /伊拉克17. publicIraqColleague218. setcolleague2=value;19. /联合国安理会了解所有的国家,所以拥有美国和伊拉克的对象属性20. /声明通讯21. publicoverridevoidDeclare(stringmessage,Countrycolleague)22. 23. if(colleague=colleague1)24. 25. colleague2.GetMessage(message);26. 27. else28. 29. colleague1.GetMessage(message);30. 31. 32. 33. /国家34. abstractclassCountry35. 36. protectedUnitedNationsmediator;37. publicCountry(UnitedNationsmediator)38. 39. this.mediator=mediator;40. 41. 42. /国家产生的时候同时产生中介者,实例化一个国家实例化出一个联合国43. /美国44. classUSA:Country45. 46. publicUSA(UnitedNationsmediator)47. :base(mediator)48. 49. /声明50. publicvoidDeclare(stringmessage)51. 52. mediator.Declare(message,this);53. 54. /获得消息55. publicvoidGetMessage(stringmessage)56. 57. Console.WriteLine(美国获得对方消息:+message);58. 59. 60. /伊拉克61. classIraq:Country62. 63. publicIraq(UnitedNationsmediator)64. :base(mediator)65. 66. /声明67. publicvoidDeclare(stringmessage)68. 69. mediator.Declare(message,this);70. 71. 72. /获得消息73. publicvoidGetMessage(stringmessage)74. 75. Console.WriteLine(伊拉克获得对方消息:+message);76. 77. 访问者模式 表示一个作用于某对象结构中的各元素的操作.它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作. 对象结构类 由于总是需要男人,女人在不同状态的对比,所以我们需要一个对象结构类来针对不同状态遍历男人与女人,得到不同的反应. 它把数据结构和作用于结构上的操作之间的耦合解脱开,使得操作集合可以相对自由地演化.访问者模式的目的是要把处理从数据结构分离出来. 有比较稳定的数据结构,又有易于变化的算法的话,使用访问者模式就是比较适合的,因为访问者模式使得算法操作的增加变得容易.优点: 增加新的操作很容易,因为增加新的操作就意味着增加一个新的访问者.访问者模式将有关的行为集中到一个访问者对象中(状态-成功,失败,恋爱)缺点: 增加新的数据结构变得困难.(人-男人,女人)访问者模式结构图: 课本实例:男人女人成功失败的状态代码如下:csharpview plaincopyprint?1. /状态的抽象类和人的抽象类2. abstractclassAction3. 4. /得到男人结论或反应5. publicabstractvoidGetManConclusion(ManconcreteElementA);6. 7. /得到女人结论或反应8. publicabstractvoidGetWomanConclusion(WomanconcreteElementA);9. 10. abstractclassPerson11. 12. publicabstractvoidAccept(Actionvisitor);13. 14. /成功15. classSuccess:Action16. 17. publicoverridevoidGetManConclusion(ManconcreteElementA)18. 19. Console.WriteLine(01时,背后多半有一个伟大的女人,concreteElementA.GetType().Name,this.GetType().Name);20. 21. 22. publicoverridevoidGetWomanConclusion(WomanconcreteElementB)23. 24. Console.WriteLine(01时,背后大多有一个不成功的男人,concreteElementB.GetType().Name,this.GetType().Name);25. 26. 27. 28. /失败29. classFailing:Action30. 31. publicoverridevoidGetManConclusion(ManconcreteElementA)32. 33. Console.WriteLine(01时,闷头喝酒,谁也不用劝,concreteElementA.GetType().Name,this.GetType().Name);34. 35. 36. publicoverridevoidGetWomanConclusion(WomanconcreteElementB)37. 38. Console.WriteLine(01时,眼泪汪汪,谁也劝不动,concreteElementB.GetType().Name,th
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 收纳师行业知识培训课件
- 2025年义务教育科学课程标准考试测试题库及参考答案
- 2025版义务教育语文课程标准理论测试题及答案【附语文新课标解读】
- 2025义务教育化学课程标准考试题库及答案
- 撇捺的硬笔书法课件
- 外企技术面试题及答案
- 洗浴场所经营与管理面试题与答案
- 针对不同行业和职位的面试题库分享
- 金融局面试题及答案解析:金融行业人才选拔策略
- 企业选拔与个人职业规划紧密结合的面试题目集
- 养生茶基础知识培训课件
- 2025年暑假反电信网络诈骗试题及答案
- 2025年医学基础知识真题(附答案)
- 新学期教学工作会议上校长讲话:把功夫下在课堂里把心思放在学生上把质量落到细节中
- 电工教学空气开关课件
- 废旧钢模板翻新工艺技术方案
- 5Why原因分析方法培训
- 2025至2030中国电子产品散热器行业市场现状分析及竞争格局与投资发展报告
- 2025年中国真人CS行行业市场调研分析及投资前景预测报告
- 泌尿外科快速康复外科理念
- CJ/T 292-2008城市市政综合监管信息系统绩效评价
评论
0/150
提交评论