模板方法模式

类图

代码

AbstractClass

1
2
3
4
5
6
7
8
9
10
11
12
13
abstract class Invoice{

public void start(){
System.out.println("开发票前操作");
boolean rs = this.make();
if(rs){
System.out.println("开票成功扣减库存");
}
}

abstract boolean make();

}

ConcreteClass

1
2
3
4
5
6
7
8
class ConcreteInvoice extends Invoice{

@Override
boolean make() {
System.out.println("调用外部请求");
return true;
}
}

测试类

1
2
3
4
5
6
7
8
public class Main {
public static void main(String args[]){

Invoice invoice = new ConcreteInvoice();

invoice.start();
}
}

总结

概述

文中的例子是一个工作中真实的例子,只是做了一些简化。

Invoice.start()是开发票的核心模块,提供了一个模板方法make,各个方法服务的提供商提供了开发票的具体实现

优点

可以进行核心业务的处理,细节由不同的实现方进行定义,提取公共行为

缺点