14、设计模式(行为型)之模板方法模式(模板模式)

梦里梦外; 2022-05-10 05:18 263阅读 0赞

作用

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

何时使用

  • 有一些通用的方法。

优点

  1. 封装不变部分,扩展可变部分。
  2. 提取公共代码,便于维护。
  3. 行为由父类控制,子类实现。

实例

  1. /**
  2. * @Author: create_By: chenxin
  3. * @Data:Created in 2018/9/25 14:27
  4. * @Version:
  5. * @Acton:
  6. */
  7. public abstract class BankTemplate {
  8. public void takeNumber(){
  9. System.out.println("取号排队");
  10. }
  11. public abstract void transact(); //办理具体事情,钩子方法
  12. public void evaluate(){
  13. System.out.println("反馈评分");
  14. }
  15. public final void proces(){ //模板方法
  16. this.takeNumber();
  17. this.transact();
  18. this.evaluate();
  19. }
  20. }
  21. /**
  22. * @Author: create_By: chenxin
  23. * @Data:Created in 2018/9/25 14:45
  24. * @Version:
  25. * @Acton:
  26. */
  27. public class DradMoney extends BankTemplate{
  28. @Override
  29. public void transact() {
  30. System.out.println("取款");
  31. }
  32. }
  33. /**
  34. * @Author: create_By: chenxin
  35. * @Data:Created in 2018/9/25 14:44
  36. * @Version:
  37. * @Acton:
  38. */
  39. public class TestTemplateDemo {
  40. public static void main(String[] args){
  41. test1();
  42. test2();
  43. test3();
  44. }
  45. /* 使用常规方法 */
  46. public static void test1(){
  47. BankTemplate drad = new DradMoney();
  48. drad.proces();
  49. }
  50. /* 使用内部方法 */
  51. public static void test2(){
  52. BankTemplate template = new BankTemplate() {
  53. @Override
  54. public void transact() {
  55. System.out.println("我要存钱");
  56. }
  57. };
  58. template.proces();
  59. }
  60. public static void test3(){
  61. BankTemplate template = new BankTemplate() {
  62. @Override
  63. public void transact() {
  64. System.out.println("我要办信用卡");
  65. }
  66. };
  67. template.proces();
  68. }
  69. }

关系结构图

70

发表评论

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

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

相关阅读

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

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