模版方法模式的定义
定义一个操作中的算法框架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法额机构即可重定义该算法的某些特定步骤
注意:抽象模版中的基本方法尽量设计为protectes类型,符合迪米特法则,不要暴露的属性或方法尽量不要设置为protected类型,实现类若非必要,尽量不要扩大父类的访问权限
模版方法模型的应用
模版方法模型的优点
# 1 封装不变部分,扩展可变部分 #(把认为不变部分的算法封装到父类实现,而可变部分的则通过继承来继续扩展) # 2 提取公共部分代码,便于维护 # 3行为由父类控制,子类实现 #(基本方法由子类实现,因此子类可以通过扩展的方式增加相应的功能,符合开闭原则)
模版方法模式的缺点
# 一般的设计习惯,抽象类负责最抽象、最一般的事物属性和方法,实现完成具体的事物属性和方法。但是模版方法模式却颠倒了,抽象类定义了部分抽象方法,由子类实现,子类的执行结果影响了父类的结果,也就是子类对父类产生了影响,在复杂的项目中,会带来代码阅读的难度,而且使新手产生不适应。
模版方法模式的使用场景
- 多个子类有公共的方法,并且逻辑基本相同时。
- 重要重复的算法,可以把核心算法设计为模版方法,周边的相应细节功能由各个子类实现
- 重构时,模仿方法模式是一个经常使用的模式,把相同的代码抽取到父类中,然后通过钩子函数约束其行为
实践
父类怎么调用子类的方法
# 父类可以调用子类的方法,但是不建议这么做
# 1 把子类传递到父类的有参构造中,然后调用
# 2 使用反射调用
# 3 父类调用子类的静态方法