模板设计模式(template method)
模板方法模式是基于”继承“的。
概念
模板模式定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。这种算法骨架就像模板一样,子类通过填装式重写父类方法,实现需求的功能。
通过子类来实现具体的功能。
应用
操作算法在这里描述很生动,比如我们将模板模式用在流程固定的操作上,比如打印字符,下单订购,注册登陆。比如spring 中对 hibernate 的支持,将一些已经定好的方法封装起来,比如开启事务、获取 session、关闭 session 等,程序员不重复写那些已经规范好的代码,直接丢一个实体就可以保存。比如java.io.inputstream。
拓展要点
逻辑处理通用化,父类定义了算法就不需要子类相应再去定义。只要有多个子类逻辑相同的场景都可以使用模板设计模式,一般算法用final修饰,避免恶意修改。
缺点
引入了抽象类,每一个不同的实现都需要一个子类来实现,导致类的个数增加,从而增加了系统实现的复杂度。
优点
提高代码复用性
将相同部分的代码放在抽象的父类中
提高了拓展性
将不同的代码放入不同的子类中,通过对子类的扩展增加新的行为
实现了反向控制
通过一个父类调用其子类的操作,通过对子类的扩展增加新的行为,实现了反向控制 & 符合“开闭原则”