模板方法属于行为型模式:定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。
意思解析:就是在业务逻辑中,有一部分逻辑是模糊的,还不确定的操作,但有一些是确定的逻辑,确定的逻辑我们可以写在公共类(可以是父类)里面,模糊的逻辑可以写在子类里面。
比如:
1:去银行办业务,(进入银行,排号,离开银行)属于公共部分,大家都会去做,但是去银行里面具体内容(如:取钱,存钱,贷款)等是不确定的,因为每个人的操作是不一样的。
2:进入加油平台(登录,输出验证码,退出)属于公共部分,(充值,还款等)属于不确定部分。
UML:
abstractClass:抽象类
templateMethod:模板方法,整个算法的骨架。 虚线部分为模板方法的具体操作。
commonMethod_A:公共的方法(确定的方法)
commonMethod_B:公共的方法(确定的方法)
method_C():抽象方法,不确定的方法
ConcreteClass:具体实现类
method_C():具体的方法实现
直接上代码:
抽象类:
具体实现类:
测试类:
代码一目了然:
1:抽象类中的抽象方法operation()方法,由子类去实现。
2:测试类中,zhagnsan,lisi,可直接调用父类的模板方法。
3:排队,取号为公众方法,operation为抽象方法
钩子方法说明,钩子方法其实就是父类的空方法,为什么写成空的呢:
1:因为业务需求,不是每个子类都需要实现钩子方法,所以写成抽象的不合适。
2:钩子方法相当于静态方法作用一样,只不过区别于1。
3:写成空方法,利于子类去扩展
JDK源码里面的模板方法:
ArrayList的addAll()为抽象方法,每个子类都去重写了该方法