示例"/>
java 模板模式简介和示例
java 模板模式简介和示例
1、什么是模板模式
1.1 模板模式说明
模板模式(Template Pattern)又叫模板方法模式(Template Method Pattern): 行为型模式,定义一个操作中的算法的骨架,一个抽象类公开定义了执行他的方法。他的子类可以按需重写方法实现,将一些操作延迟到子类中,调用还是按照抽象类中定义的方式进行。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
在生活中:
- 做包子需要几个步骤,和面——>包馅——>开蒸,添加不同的馅可以制作不同口味的包子,和面和蒸包子的步骤都是一样的
- 炒菜:开火——>放油——>xxx——>出锅关火,开火放油出锅关火步骤都一样,具体怎么炒则是变化的。
所以以上示例都可以可以使用模板模式。
1.2 模板模式结构
模板模式结构比较简单,基于继承,主要分为:
1. abstract class: 抽象类,类中定义了模板方法,定义了算法的基本骨架,具体实现需要子类去实现
2. concrete class: 继承`Abstract Class`类,并实现抽象接口和差异部分
2、模板模式UML类图
3、示例
3.1. 抽象类
/*** @Description: 炒瓜子* @author: xy* @date: 2022年10月26日 14:19*/
public abstract class AbstractFriedMelonSeeds {private void init(){System.out.println("准备好瓜子");}private void stove(){System.out.println("准备火炉");}private void wok(){System.out.println("准备锅");}private void addMelonSeeds(){System.out.println("添加瓜子");}public void fried(){System.out.println("用你的爪子炒");}/*** 添加调料*/public abstract void addSeasoning();public void outWok(){System.out.println("出锅");}public final void make(){init();stove();wok();addSeasoning();fried();addSeasoning();outWok();}}
3.2 实现类 咸味瓜子
/*** @Description: 咸瓜子* @author: xy* @date: 2022年10月26日 16:38*/
public class SaltedMelonSeeds extends AbstractFriedMelonSeeds{/*** 添加配料*/@Overridepublic void addSeasoning() {System.out.println("加盐");}
}
3.3 实现类 甜瓜子
/*** @Description: 甜味瓜子* @author: xy* @date: 2022年10月26日 16:38*/
public class SugarMelonSeeds extends AbstractFriedMelonSeeds{/*** 添加配料*/@Overridepublic void addSeasoning() {System.out.println("加糖");}
}
3.4 添加钩子的抽象类
钩子函数也就是回调方法,在一定条件控制下是否自动调用,不需要人手动去调用
通过重写isAddSeasoning()钩子函数控制是否需要添加配料
/*** @Description: 炒瓜子* @author: xy* @date: 2022年10月26日 14:19*/
public abstract class AbstractFriedMelonSeeds {private void init(){System.out.println("准备好瓜子");}private void stove(){System.out.println("准备火炉");}private void wok(){System.out.println("准备锅");}private void addMelonSeeds(){System.out.println("添加瓜子");}public void fried(){System.out.println("用你的爪子炒");}/*** 添加调料*/public abstract void addSeasoning();public void outWok(){System.out.println("出锅");}private boolean isAddSeasoning(){return false;}public final void make(){init();stove();wok();addMelonSeeds();fried();if(isAddSeasoning()){addSeasoning();}outWok();}}
3.5 运行测试
public class Client {public static void main(String[] args) {//咸味瓜子AbstractFriedMelonSeeds saltedMelonSeeds = new SaltedMelonSeeds();saltedMelonSeeds.make();System.out.println("--------------");//甜味瓜子AbstractFriedMelonSeeds sugarMelonSeeds = new SugarMelonSeeds();sugarMelonSeeds.make();}
}
4、模板模式优缺点
4.1 优点
1. 相同处理逻辑的代码放到抽象父类中,增加复用性
2. 通过子类去完成具体的实现,扩展新的行为,提高代码的扩展性
3. 通过父类来调用子类的操作,符合开闭原则
4.2 缺点
- 每实现新功能需要新的子类,导致类的数量大幅增加,提升了系统复杂度
- 继承本身缺点,父类添加新的抽象方法,所有子类都需要重写
更多推荐
java 模板模式简介和示例
发布评论