常见几种设计模式之模板模式

目录
一、创建型
1.单例模式
2.工厂模式
3.原型模式
二、结构型
1.享元模式
2.代理模式
三、行为型
1.模板模式
(1)模板模式-制作豆浆
(2)钩子方法-制作豆浆
(3)Spring IOC初始化
(4)总结
2.职责链模式

(1)模板模式-制作豆浆

1.项目介绍

(1)制作豆浆流程: 选材料 ==> 添加材料 ==> 浸泡 ==> 放到豆浆机打碎
(2)这些流程对于制作红豆豆浆,花生豆浆得流程是一样的,所以可以考虑使用模板方法模式

2.模板方法模式(Template Method Pattern),又叫模板模式,属于行为性模式

(1)在一个抽象类中定义执行多种方法的模板方法,他的子类可以按需重写方法实现,调用以抽象类定义的模板方法执行
(2)简而言之,定义一个算法的骨架,将一系列的步骤延迟到子类实现

3.模式方法的角色

(1)AbstractClass抽象类:类中的模板方法定义了算法的骨架,具体步骤交给子类去实现,抽象方法operation2,3,4
(2)ConcreteClass继承抽象类:实现对应的抽象方法(也就是父类算法的步骤)

(2)钩子方法-制作豆浆

(1)模板方法模式的抽象类中可以定义一个方法,不做任何事情,子类可以视情况要不要调用他,该方法叫做"钩子"
[子类通过钩子方法来控制父类模板方法的执行流程]
[也就是例子的customAddCondinents方法]
// 5.是否需要添加原料:默认添加
boolean customAddCondinents(){
return true;
}
(2)利用制作豆浆的例子来说,我们制作纯豆浆不用添加任何配料,那么我们通过钩子方法对前面的模板进行改造


image-20210201065909740.png

(3)Spring IOC初始化

AbstractApplicationContext.java抽象类的模板方法


image-20201208212319571.png

AbstractApplicationContext.java抽象类的钩子方法


image-20201208213047472.png

调用ClassPathXmlApplicationContext


image-20201208215153100.png

(4)总结

1.小结

(1)基本思想:算法存在于抽象父类中,若要修改算法的步骤,修改抽象父类的模板方法即可
(2)final:一般模板方法都需要加上final关键字,防止子类重写模板方法
(3)使用场景:不同产品的制作流程分为一系列步骤,并且只有个别步骤在实现上可能不同,大部分相同,则考虑使用模板方法

2.优缺点

(1)优点(统一 + 灵活):父类的模板方法保证了算法结构保持不变,子类提供部分模板方法步骤的实现,提供了很大的灵活性
(2)缺点:每个不同的实现都需要一个子类实现,导致类的个数增加

你可能感兴趣的:(常见几种设计模式之模板模式)