经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » 设计模式 » 查看文章
设计模式-行为型-模板模式
来源:cnblogs  作者:酷学大叔  时间:2019/10/8 9:28:03  对本文有异议

模板模式(Template):

  提到模板,可能大多数人想到的是"简历模板"、"论文模板"等,比如我们要写简历时,会从网上下载一份漂亮的简历模板,其格式是固定的,我们根据自己的情况填充不同的内容。模板模式定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

模板模式的角色:

  

  1)模板方法(AbstractClass):定义了一个或多个抽象操作,以便让子类实现,这些抽象操作称为基本操作;

  2)模板方法的具体实现(ConcreteClass):实现父类所定义的一个或多个抽象方法。

  上图为java的UML图,我们以该例子来写我们的C#版本(玩游戏的步骤,初始化游戏-》开始游戏-》游戏结束)

  1. 1 internal class Program
  2. 2 {
  3. 3 private static void Main(string[] args)
  4. 4 {
  5. 5 Game game1 = new Cricket();
  6. 6 game1.play();
  7. 7 Game game2 = new Football();
  8. 8 game2.play();
  9. 9 }
  10. 10 }
  11. 11
  12. 12 internal abstract class Game
  13. 13 {
  14. 14 protected abstract void initialize();
  15. 15
  16. 16 protected abstract void startPlay();
  17. 17
  18. 18 protected abstract void endPlay();
  19. 19
  20. 20 //模板
  21. 21 public void play()
  22. 22 {
  23. 23 //初始化游戏
  24. 24 initialize();
  25. 25
  26. 26 //开始游戏
  27. 27 startPlay();
  28. 28
  29. 29 //结束游戏
  30. 30 endPlay();
  31. 31 }
  32. 32 }
  33. 33
  34. 34 internal class Cricket : Game
  35. 35 {
  36. 36 protected override void endPlay()
  37. 37 {
  38. 38 Console.WriteLine("Cricket Game Finished!");
  39. 39 }
  40. 40
  41. 41 protected override void initialize()
  42. 42 {
  43. 43 Console.WriteLine("Cricket Game Initialized! Start playing.");
  44. 44 }
  45. 45
  46. 46 protected override void startPlay()
  47. 47 {
  48. 48 Console.WriteLine("Cricket Game Started. Enjoy the game!");
  49. 49 }
  50. 50 }
  51. 51
  52. 52 internal class Football : Game
  53. 53 {
  54. 54 protected override void endPlay()
  55. 55 {
  56. 56 Console.WriteLine("Football Game Finished!");
  57. 57 }
  58. 58
  59. 59 protected override void initialize()
  60. 60 {
  61. 61 Console.WriteLine("Football Game Initialized! Start playing.");
  62. 62 }
  63. 63
  64. 64 protected override void startPlay()
  65. 65 {
  66. 66 Console.WriteLine("Football Game Started. Enjoy the game!");
  67. 67 }
  68. 68 }

模板模式的优缺点:

  优点:

    1)封装不变部分,扩展可变部分,符合OCP原则;

    2)提取公共代码,便于维护;

    3)行为由父类控制,子类实现。

  缺点:每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大。

注意:一般模板方法定义成protected使得只有子类可以访问他们。

参考:https://www.runoob.com/design-pattern/template-pattern.html

原文链接:http://www.cnblogs.com/az4215/p/11613371.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号