- 模板模式
关心的是流程
执行流程固定,但中间有些步骤有细微差别
如:SpringJDBC
是java规范,各个数据库厂商自己去实现
1、加载驱动类DriverManager
2、建立连接
3、创建语句集(标准语句集、预处理语句集)(语句集? MySQL、Oracle、SQLServer、Access)
4、执行语句集
5、结果集ResultSet 游标
ORM(?)
public abstract class Packing {
protected final void start(){
this.open();
if (needBlock()){
this.block();
}
this.push();
this.close();
}
abstract void block();
//钩子方法:实现流程的微调
protected boolean needBlock(){
return false;
}
final void close(){
System.out.println("关闭冰箱");
}
protected abstract void push();
final void open(){
System.out.println("打开冰箱");
}
}
public class Elephant extends Packing {
private boolean needBlock = false;
public Elephant(boolean needBlock) {
this.needBlock = needBlock;
}
@Override
void block() {
System.out.println("将大象分块");
}
@Override
protected void push() {
System.out.println("放入冰箱");
}
@Override
protected boolean needBlock() {
return this.needBlock;
}
}
public class Pig extends Packing {
@Override
void block() {
System.out.println("将猪分块");
}
@Override
protected void push() {
System.out.println("放入冰箱");
}
}
public class Test {
public static void main(String[] args){
Packing elephant = new Elephant(true);
elephant.start();
Packing pig = new Pig();
pig.start();
}
}
模板模式的优缺点
- 优点:
- 利用模板方法将相同处理逻辑的代码放到抽象父类中,可以提高代码的复用性。
- 将不同的代码不同的子类中,通过对子类的扩展增加新的行为,提高代码的扩展性。
- 把不变的行为写在父类上,去除子类的重复代码,提供了一个很好的代码复用平台, 符合开闭原则。
- 缺点:
- 类数目的增加,每一个抽象类都需要一个子类来实现,这样导致类的个数增加。
- 类数量的增加,间接地增加了系统实现的复杂度。
- 继承关系自身缺点,如果父类添加新的抽象方法,所有子类都要改一遍