spring源码设计模式分析(六)-模板方法模式

简介: spring源码设计模式分析(六)-模板方法模式

模板方法模式(解决一类问题完整逻辑)

看到模板,可能会想到解决问题的一套模板,一个套路,通用的手法,具体的场景里面某个细节点不一样。把很多的方法有逻辑性(有先后顺序)的组织在一起就称之为模板方法模式,里面的抽象方法,必须依靠具体的场景(子类)实现。

在生活中,比如有的男生做饭,有的女生做饭,做饭是有一个套路,先买菜,切菜,再煮饭,然后再吃饭。但是有一个地方不一样,某某喜欢吃辣的,就多放些辣椒,某某喜欢吃咸的,就多放点咸盐。区别就是某个细节点不一样。所以放调料的时候是抽象方法。

在spring中 AbstractFactoryBean 抽象factoryBean对象创建,部分功能留给子类去实现。

遵循了设计模式6大原则中的里氏替换原则,父类出现的地方,子类一定可以出现。

1、首先玩游戏的套路都一样:所以抽象出类

  1. package com.weizhaoyang.template;

  2. /**
  3. * 游戏模板
  4. */
  5. public  abstract classGame{
  6.    abstract void  intialize();
  7.    abstract void  startPlay();
  8.    abstract void  endPlay();
  9. //玩游戏方法
  10. public  final  void  play(){
  11.        //初始化游戏
  12.        intialize();
  13.        //开始游戏
  14.        startPlay();
  15.        //结束游戏
  16.        endPlay();
  17. }
  18. }

2、提供一个足球的游戏

  1. package com.weizhaoyang.template;

  2. publicclassFootballGame extends Game{
  3. @Override
  4. void intialize() {
  5. System.out.println("游戏初始化");
  6. }

  7. @Override
  8. void startPlay() {
  9. System.out.println("游戏开始,用脚踢球");
  10. }

  11. @Override
  12. void endPlay() {
  13. System.out.println("游戏结束");
  14. }
  15. }

3、提供 一个篮球的游戏

  1. package com.weizhaoyang.template;

  2. publicclassBasketBallGame extends  Game{
  3. @Override
  4. void intialize() {
  5. System.out.println("游戏初始化");
  6. }

  7. @Override
  8. void startPlay() {
  9. System.out.println("游戏开始,用手拍球");
  10. }

  11. @Override
  12. void endPlay() {
  13. System.out.println("游戏结束");
  14. }
  15. }

4、提供一个测试类:

  1. package com.weizhaoyang.template;

  2. /**
  3. * 测试类
  4. */
  5. publicclassGameTest{
  6. publicstaticvoid main(String[] args) {
  7. //进行测试
  8. Game game=newFootballGame();
  9.        game.play();
  10. }
  11. }

运行的结果如下:

在上面的FootBallGame或者BasketBallGame这两个类也可以在做一个抽象类,把startPlay方法做为抽象方法,因为可以用力,或者轻力去操作球,所以在框架中有很多抽象类继承抽象类,它就是这种思想,抽象是无场景化的。在上面的例子中,抽象类中有一套的逻辑,而接口是没有的,必须保证所有方法实现。上面的例子football和basketBall还没有具体到某个人。

在框架中用的最多的就是模板方法模式。

相关文章
|
人工智能 Java Serverless
【MCP教程系列】搭建基于 Spring AI 的 SSE 模式 MCP 服务并自定义部署至阿里云百炼
本文详细介绍了如何基于Spring AI搭建支持SSE模式的MCP服务,并成功集成至阿里云百炼大模型平台。通过四个步骤实现从零到Agent的构建,包括项目创建、工具开发、服务测试与部署。文章还提供了具体代码示例和操作截图,帮助读者快速上手。最终,将自定义SSE MCP服务集成到百炼平台,完成智能体应用的创建与测试。适合希望了解SSE实时交互及大模型集成的开发者参考。
9568 60
|
20天前
|
监控 Cloud Native Java
Spring Integration 企业集成模式技术详解与实践指南
本文档全面介绍 Spring Integration 框架的核心概念、架构设计和实际应用。作为 Spring 生态系统中的企业集成解决方案,Spring Integration 基于著名的 Enterprise Integration Patterns(EIP)提供了轻量级的消息驱动架构。本文将深入探讨其消息通道、端点、过滤器、转换器等核心组件,以及如何构建可靠的企业集成解决方案。
80 0
|
3月前
|
负载均衡 Java API
基于 Spring Cloud 的微服务架构分析
Spring Cloud 是一个基于 Spring Boot 的微服务框架,提供全套分布式系统解决方案。它整合了 Netflix、Zookeeper 等成熟技术,通过简化配置和开发流程,支持服务发现(Eureka)、负载均衡(Ribbon)、断路器(Hystrix)、API网关(Zuul)、配置管理(Config)等功能。此外,Spring Cloud 还兼容 Nacos、Consul、Etcd 等注册中心,满足不同场景需求。其核心组件如 Feign 和 Stream,进一步增强了服务调用与消息处理能力,为开发者提供了一站式微服务开发工具包。
493 0
|
5月前
|
SQL 前端开发 Java
深入分析 Spring Boot 项目开发中的常见问题与解决方案
本文深入分析了Spring Boot项目开发中的常见问题与解决方案,涵盖视图路径冲突(Circular View Path)、ECharts图表数据异常及SQL唯一约束冲突等典型场景。通过实际案例剖析问题成因,并提供具体解决方法,如优化视图解析器配置、改进数据查询逻辑以及合理使用外键约束。同时复习了Spring MVC视图解析原理与数据库完整性知识,强调细节处理和数据验证的重要性,为开发者提供实用参考。
254 0
|
9月前
|
XML Java 数据格式
Spring Core核心类库的功能与应用实践分析
【12月更文挑战第1天】大家好,今天我们来聊聊Spring Core这个强大的核心类库。Spring Core作为Spring框架的基础,提供了控制反转(IOC)和依赖注入(DI)等核心功能,以及企业级功能,如JNDI和定时任务等。通过本文,我们将从概述、功能点、背景、业务点、底层原理等多个方面深入剖析Spring Core,并通过多个Java示例展示其应用实践,同时指出对应实践的优缺点。
145 14
|
11月前
|
Java BI API
spring boot 整合 itextpdf 导出 PDF,写入大文本,写入HTML代码,分析当下导出PDF的几个工具
这篇文章介绍了如何在Spring Boot项目中整合iTextPDF库来导出PDF文件,包括写入大文本和HTML代码,并分析了几种常用的Java PDF导出工具。
2522 0
spring boot 整合 itextpdf 导出 PDF,写入大文本,写入HTML代码,分析当下导出PDF的几个工具
|
11月前
|
Java 调度 开发者
spring的@Scheduled()有几种定时模式?
【10月更文挑战第12天】spring的@Scheduled()有几种定时模式?
411 1
|
11月前
|
XML Java 应用服务中间件
【Spring】运行Spring Boot项目,请求响应流程分析以及404和500报错
【Spring】运行Spring Boot项目,请求响应流程分析以及404和500报错
1035 2
|
负载均衡 Java 网络架构
实现微服务网关:Zuul与Spring Cloud Gateway的比较分析
实现微服务网关:Zuul与Spring Cloud Gateway的比较分析
675 5