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还没有具体到某个人。

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

相关文章
|
2月前
|
Java 调度 开发者
spring的@Scheduled()有几种定时模式?
【10月更文挑战第12天】spring的@Scheduled()有几种定时模式?
101 1
|
2月前
|
Java BI API
spring boot 整合 itextpdf 导出 PDF,写入大文本,写入HTML代码,分析当下导出PDF的几个工具
这篇文章介绍了如何在Spring Boot项目中整合iTextPDF库来导出PDF文件,包括写入大文本和HTML代码,并分析了几种常用的Java PDF导出工具。
510 0
spring boot 整合 itextpdf 导出 PDF,写入大文本,写入HTML代码,分析当下导出PDF的几个工具
|
2月前
|
XML Java 应用服务中间件
【Spring】运行Spring Boot项目,请求响应流程分析以及404和500报错
【Spring】运行Spring Boot项目,请求响应流程分析以及404和500报错
197 2
|
3月前
|
设计模式 Java Spring
spring源码设计模式分析(五)-策略模式
spring源码设计模式分析(五)-策略模式
|
3月前
|
负载均衡 Java 网络架构
实现微服务网关:Zuul与Spring Cloud Gateway的比较分析
实现微服务网关:Zuul与Spring Cloud Gateway的比较分析
132 5
|
3月前
|
消息中间件 设计模式 缓存
spring源码设计模式分析(四)-观察者模式
spring源码设计模式分析(四)-观察者模式
|
3月前
|
XML 存储 Java
Spring-源码深入分析(二)
Spring-源码深入分析(二)
|
3月前
|
XML 设计模式 Java
Spring-源码深入分析(一)
Spring-源码深入分析(一)
|
3月前
|
SQL 监控 druid
springboot-druid数据源的配置方式及配置后台监控-自定义和导入stater(推荐-简单方便使用)两种方式配置druid数据源
这篇文章介绍了如何在Spring Boot项目中配置和监控Druid数据源,包括自定义配置和使用Spring Boot Starter两种方法。
|
2月前
|
人工智能 自然语言处理 前端开发
SpringBoot + 通义千问 + 自定义React组件:支持EventStream数据解析的技术实践
【10月更文挑战第7天】在现代Web开发中,集成多种技术栈以实现复杂的功能需求已成为常态。本文将详细介绍如何使用SpringBoot作为后端框架,结合阿里巴巴的通义千问(一个强大的自然语言处理服务),并通过自定义React组件来支持服务器发送事件(SSE, Server-Sent Events)的EventStream数据解析。这一组合不仅能够实现高效的实时通信,还能利用AI技术提升用户体验。
193 2