TempleteMethod - 模板方法模式

概述:

父类定义过程,子类具体处理

TempleteMethod_sample


说明:

1.本文仅仅是对 图解设计模式 的简单总结(个人笔记).
2.文章中的图片均来自本书,添加水印只是为了防止盗链行为,并无侵权的想法.
综上,若侵权, 请联系删除!
转载请标注出处!


案例:

  • 案例说明:

    是一段讲字符和字符串循环处理5次的简单程序

  • TempleteMethod_uml_case

  • 主要代码:

    package Gof.TemplateMethod;
    
    public abstract class AbstractDisplay { // 抽象类AbstractDisplay
        public abstract void open();        // 交给子类去实现的抽象方法(1) open
        public abstract void print();       // 交给子类去实现的抽象方法(2) print
        public abstract void close();       // 交给子类去实现的抽象方法(3) close
        public final void display() {       // 本抽象类中实现的display方法
            open();                         // 首先打开…
            for (int i = 0; i < 5; i++) {   // 循环调用5次print
                print();                    
            }
            close();                        // …最后关闭。这就是display方法所实现的功能
        }
    }
    
  • 代码链接:传送门


uml综述

TempleteMethod_uml

  • AbstractClass: 实现模板方法,定义抽象方法
  • ConcreteClass: 实现抽象方法

收获:

  • 使用父类类型的变量保存子类实例的有点是,即使没有用instanceof等指定子类的种类,程序也可以正常工作

  • 里氏替换原则: 无论在父类类型的变量中保存的呢个子类的实例,程序都可以正常工作 (通用继承规则)

  • 申明抽象方法是为了:

    • 期待子类实现抽象方法
    • 要求子类实现抽象方法
  • java 接口不能替代抽象类的原因:interface的方法不可以实现,而abstractClass 方法可以实现

相关设计模式:

  • Factory Method : 将template method 生成一个实例
  • strategy : 委托改变程序行为, Template Method 则是通过继承改变程序行为

注意:

此部分内容属于对GOF Design Pattern知识的初步认知阶段,参考书籍是结城浩的《图解设计模式》,简单易懂,十分推荐!
以上内容,作者一字一句码出来的,纯属不易,欢迎大家转载,转载是还请您表明出处。另外如果我有侵权行为,请在下方留言,确认后我会及时撤销相应内容,谢谢大家!

PS:欢迎大家来到我的小站,鸣谢!