行为型模式-模板方法模式

古城微笑少年丶 2022-05-23 13:29 291阅读 0赞
  1. 定义一个操作框架,将一些具体的步骤延迟到子类中实现。使子类可以在不改变算法的结构上可以重定义改算法的某些特定步骤。
  2. 封装不变的部分,扩展可变部分,把不便的部分封装到父类中实现,可变的部分通过继承在子类中实现。
  3. 模板方法角色:
  4. AbstractClass定义一个模板,其子类将重定义PrimitiveOperation1PrimitiveOperation2操作
  5. ConcreteClass:实现PrimitiveOperation1PrimitiveOperation2以完成算法中与特定子类(Client)相关的内容。
  6. 在模板方法模式中,AbstractClass中的TemplateMethod提供了一个标准模板,该模板包含PrimitiveOperation1PrimitiveOperation2两个方法,这两个方法的内容Client可以根据自己的需要重写。

结构图:

2018061007482874

2018061007483999

  1. namespace Libraries.Test.DesignPattern.TemplateMethod
  2. {
  3. /// <summary>
  4. /// 快递接口查询
  5. /// </summary>
  6. public abstract class Express
  7. {
  8. /// <summary>
  9. /// 验证快递公司和快递单号
  10. /// </summary>
  11. /// <param name="postCompany"></param>
  12. /// <param name="postNo"></param>
  13. /// <returns></returns>
  14. private bool Validate(string postCompany, string postNo)
  15. {
  16. bool result = false;
  17. result = true;
  18. return result;
  19. }
  20. /// <summary>
  21. /// 模板方法
  22. /// </summary>
  23. /// <param name="postCompany"></param>
  24. /// <param name="postNo"></param>
  25. /// <returns></returns>
  26. public string Excute(string postCompany, string postNo)
  27. {
  28. string str = "";
  29. bool result = Validate(postCompany, postNo);
  30. if (!result)
  31. {
  32. str = "快递公司或快递单号不符合规则";
  33. return str;
  34. }
  35. //模板方法执行操作
  36. str = Realization(postCompany, postNo);
  37. return str;
  38. }
  39. protected abstract string Realization(string postCompany, string postNo);
  40. }
  41. }
  42. namespace Libraries.Test.DesignPattern.TemplateMethod
  43. {
  44. public class Kuaidi100 : Express
  45. {
  46. protected override string Realization(string postCompany, string postNo)
  47. {
  48. return "通过Kuaidi100来查询快递信息:" + postCompany + "," + postNo;
  49. }
  50. }
  51. }
  52. namespace Libraries.Test.DesignPattern.TemplateMethod
  53. {
  54. public class Kdniao : Express
  55. {
  56. protected override string Realization(string postCompany, string postNo)
  57. {
  58. return "通过Kdniao来查询快递信息:" + postCompany + "," + postNo;
  59. }
  60. }
  61. }
  62. namespace Libraries.Test.DesignPattern.TemplateMethod
  63. {
  64. public class Client
  65. {
  66. public void Excute()
  67. {
  68. //Kdniao查询
  69. Express kdniao = new Kdniao();
  70. string kdniaoStr = kdniao.Excute("圆通", "12542154125");
  71. //Kuaidi100查询
  72. Express kuaid100 = new Kuaidi100();
  73. string kuaid100Str = kuaid100.Excute("韵达", "1254215421");
  74. }
  75. }
  76. }

发表评论

表情:
评论列表 (有 0 条评论,291人围观)

还没有评论,来说两句吧...

相关阅读

    相关 【设计模式行为模板方法模式

    模板方法模式在一个方法中定义一个算法骨架,并将某些步骤推迟到子类中实现。模板方法模式可以让子类在不改变算法整体结构的情况下,重新定义算法中的某些步骤。属于行为性设计模式。 这