模板模式是常用的Java设计模式,下面我重点详解模板模式的角色实现与应用场景@mikechen
模板模式定义
模板模式是一种行为设计模式,模板模式的核心思想是将共同的算法流程封装在一个抽象类中,具体实现则在子类中实现。
模板模式可以用来处理一些复杂的算法与步骤,通过将这些步骤封装在一个模板方法中,我们可以使得算法的结构更清晰。
模板模式设计
模板模式的设计实现,主要包含以下角色:
1.抽象类(Abstract Class)
定义了算法的骨架,包含了一些抽象方法和具体方法,抽象方法由子类来实现。
抽象类是模板模式的核心,它包含了一个模板方法和多个具体方法。
2.具体类(Concrete Class)
实现了抽象类中的抽象方法,以便在模板方法中被调用。
每个具体类实现的具体方法可以不同,但是它们都共享抽象类中定义的具体方法。
模板模式实例
模板模式的使用,需要实现上面谈到的抽象类以及具体类。
如下所示:
abstract class AbstractClass { public final void templateMethod() { commonStep1(); specificStep2(); commonStep3(); } protected void commonStep1() { System.out.println("This is a common step 1 that is executed by all subclasses"); } protected abstract void specificStep2(); protected void commonStep3() { System.out.println("This is a common step 3 that is executed by all subclasses"); } } class ConcreteClassA extends AbstractClass { @Override protected void specificStep2() { System.out.println("This is a specific implementation of step 2 for ConcreteClassA"); } } class ConcreteClassB extends AbstractClass { @Override protected void specificStep2() { System.out.println("This is a specific implementation of step 2 for ConcreteClassB"); } }
在这个示例中:
- 我们定义了一个抽象类 AbstractClass,其中包含了一个模板方法 templateMethod 和一些抽象方法和具体方法;
- 具体类 ConcreteClassA 和 ConcreteClassB 继承了抽象类 AbstractClass,并实现了抽象方法 ,以便在模板方法中被调用。
现在我们可以使用这些类来创建具体对象,并调用它们的方法:
public class Main { public static void main(String[] args) { AbstractClass classA = new ConcreteClassA(); classA.templateMethod(); AbstractClass classB = new ConcreteClassB(); classB.templateMethod(); } }
模板模式应用场景
模板模式适用于那些具有固定算法流程,但是其中某些步骤的具体实现方式可能不同的场景。
模板模式应用场景包含如下:
1.各种框架和类库中广泛使用
例如:Java中的servlet中的doGet()和doPost()方法,Hibernate中的Template和Callback等。
2.排序算法
排序算法中的比较和交换操作的实现可能会有所不同,可以使用模板模式封装算法的流程。
3.数据库访问
数据库访问中的连接、查询、结果集处理等操作都可以使用模板模式。
4.消息处理
消息处理中的消息接收、解析、路由等操作都可以使用模板模式。
以上就是模板模式详解,更多设计模式请查看:Java设计模式:23种设计模式(万字图文全面总结)
作者简介
陈睿|mikechen,10年+大厂架构经验,BAT资深面试官,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
👇阅读更多mikechen架构文章👇
阿里架构 |双11秒杀 |分布式架构 |负载均衡 |单点登录 |微服务 |云原生 |高并发 |架构师
以上
关注作者「mikechen」公众号,获取更多技术干货!
后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》,后台回复【面试】即可获取《史上最全阿里Java面试题总结》