经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » 设计模式 » 查看文章
PHP设计模式—模板方法模式
来源:cnblogs  作者:幽篁晓筑  时间:2021/3/29 9:11:05  对本文有异议

 

定义:

模板方法模式(Template Method):定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

 

结构:

  • AbstractClass:抽象类,定义并实现了一个模板方法。这个模板方法一般是一个具体方法,它给出了一个顶级逻辑的骨架,而逻辑的组成步骤在相应的抽象操作中,推迟到子类实现。
  • ConcreteClass:子类,实现父类所定义的一个或多个抽象方法。每一个 AbstractClass 都可以有任意多个ConcreteClass 与之对应,而每一个 ConcreteClass都可以给出这些抽象方法(也就是顶级逻辑的组成步骤)的不同实现,从而使得顶级逻辑的实现各不相同。
  • Client:客户端代码。

 

代码实例:

  1. /**
  2. * 抽象类
  3. * Class AbstractClass
  4. */
  5. abstract class AbstractClass
  6. {
  7. /**
  8. * 模板方法,定义操作顺序,给出逻辑骨架,而逻辑的组成是一些相对应的抽象操作,它们都推迟到子类实现
  9. */
  10. public function templateMethod()
  11. {
  12. $this->begin();
  13. $this->primitiveOperation1();
  14. $this->primitiveOperation2();
  15. $this->end();
  16. }
  17. /**
  18. * 抽象行为,由子类实现
  19. */
  20. abstract public function primitiveOperation1();
  21. /**
  22. * 抽象行为,由子类实现
  23. */
  24. abstract public function primitiveOperation2();
  25. /**
  26. * 一些公用逻辑方法
  27. */
  28. public function begin()
  29. {
  30. echo '开始' . '<br>';
  31. }
  32. /**
  33. * 一些公用逻辑方法
  34. */
  35. public function end()
  36. {
  37. echo '结束' . '<br>';
  38. }
  39. }
  40. /**
  41. * 子类
  42. * Class ConcreteClassA
  43. */
  44. class ConcreteClassA extends AbstractClass
  45. {
  46. public function primitiveOperation1()
  47. {
  48. // TODO: Implement primitiveOperation1() method.
  49. echo 'ConcreteClassA类primitiveOperation1方法的具体实现' . '<br>';
  50. }
  51. public function primitiveOperation2()
  52. {
  53. // TODO: Implement primitiveOperation2() method.
  54. echo 'ConcreteClassA类primitiveOperation2方法的具体实现' . '<br>';
  55. }
  56. }
  57. /**
  58. * 子类
  59. * Class ConcreteClassB
  60. */
  61. class ConcreteClassB extends AbstractClass
  62. {
  63. public function primitiveOperation1()
  64. {
  65. // TODO: Implement primitiveOperation1() method.
  66. echo 'ConcreteClassB类primitiveOperation1方法的具体实现' . '<br>';
  67. }
  68. public function primitiveOperation2()
  69. {
  70. // TODO: Implement primitiveOperation2() method.
  71. echo 'ConcreteClassB类primitiveOperation2方法的具体实现' . '<br>';
  72. }
  73. }
  74. // 客户端调用
  75. // ConcreteClassA
  76. $concreteClassA = new ConcreteClassA();
  77. $concreteClassA->templateMethod();
  78. // ConcreteClassB
  79. $concreteClassB = new ConcreteClassB();
  80. $concreteClassB->templateMethod();
  81. // 结果
  82. 开始
  83. ConcreteClassAprimitiveOperation1方法的具体实现
  84. ConcreteClassAprimitiveOperation2方法的具体实现
  85. 结束
  86. 开始
  87. ConcreteClassBprimitiveOperation1方法的具体实现
  88. ConcreteClassBprimitiveOperation2方法的具体实现
  89. 结束

 

总结:

  • 当我们要完成在某一个细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时,我们通常考虑用模板方法模式来处理。
  • 模板方法模式是通过把不变行为搬移到超类,去除子类中的重复代码来体现它的优势,我们通过模板方法把这些行为搬移到单一的地方,这样就帮助子类摆脱重复的不变行为的纠缠。
  • 模板方法模式提供了一个很好的代码复用平台。

 

原文链接:http://www.cnblogs.com/woods1815/p/14587217.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号