模板方法模式是一种行为设计模式, 它在超类中定义了一个算法的框架, 允许子类在不修改结构的情况下重写算法的特定步骤。
有两种类型的步骤:
- 抽象步骤必须由各个子类来实现
- 可选步骤已有一些默认实现, 但仍可在需要时进行重写
继续优化策略模式中的支付策略,由于不同的支付的总的处理过程都是一样的:先构造参数,再对参数进行签名,发起支付请求,最后解析返回结果。因此可以应用模板方法。
首先定义一个抽象类如下:Pay
1 | public abstract class Pay { |
然后在具体的继承类中实现特定的步骤也即实现抽象类中的抽象方法。
定义具体的实现类之微信支付:WeChatPay
1 |
|
定义具体的实现类之支付宝支付:ALiPay
1 |
|
定义具体的实现类之银联支付:UnionPay
1 |
|
子类的具体实现就没写了,模板方法的应用大概如此。
另外:抽象类是可以不包含抽象方法的,此时抽象类仍然不能被实例化。可以用在所有方法都是静态方法的工具类上,此时把这种工具类定义为抽象类,可以防止它被实例化。例如SpringBoot框架中的org.springframework.util包下的很多工具类就是这种用法。