springboot中使用模板⽅法设计模式-设计模块(六)
模板⽅法设计模式
- 抽象模板(Abstract Template): 定义⼀个模板⽅法,这个模板⽅法⼀般是⼀个具体⽅法,给出⼀个顶级算法⻣架,
- ⽽逻辑⻣架的组成步骤在相应的抽象操作中,推迟到⼦类实现
- 模板⽅法:定义了算法的⻣架,按某种顺序调⽤其包含的基本⽅法
- 基本⽅法:是整个算法中的⼀个步骤,包括抽象⽅法和具体⽅法
- 抽象⽅法:在抽象类中申明,由具体⼦类实现。
- 具体⽅法:在抽象类中已经实现,在具体⼦类中 可以继承或重写它
代码实现 每天早上日常
/*** 模板⽅法设计模式* 抽象模板(Abstract Template): 定义⼀个模板⽅法,这个模板⽅法⼀般是⼀个具体⽅法,给出⼀个顶级算法⻣架,* ⽽逻辑⻣架的组成步骤在相应的抽象操作中,推迟到⼦类实现* 模板⽅法:定义了算法的⻣架,按某种顺序调⽤其包含的基本⽅法* 基本⽅法:是整个算法中的⼀个步骤,包括抽象⽅法和具体⽅法* 抽象⽅法:在抽象类中申明,由具体⼦类实现。* 具体⽅法:在抽象类中已经实现,在具体⼦类中 可以继承或重写它* @author zhou*/
public abstract class AbstractTemplate {/*** 模版⽅法 : 每日日常*/public void dailyRoutineTemplateMethod(){getUp();wash();changeClothesAbstractMethod();haveMealAbstractMethod();commuteAbstractMethod();}/*** 具体⽅法:默认实现的方法*/public void getUp() {System.out.println("6点起床");}/*** 具体⽅法*/public void wash() {System.out.println("洗漱");}/*** 抽象⽅法 换衣服 */public abstract void changeClothesAbstractMethod();/*** 抽象⽅法 吃饭*/public abstract void haveMealAbstractMethod();/*** 抽象⽅法 通勤*/public abstract void commuteAbstractMethod();}
/*** 周一* @author zhou*/
public class Monday extends AbstractTemplate{@Overridepublic void changeClothesAbstractMethod() {System.out.println("今天很热啊 穿短袖吧");}@Overridepublic void haveMealAbstractMethod() {System.out.println("早饭吃麦当劳");}@Overridepublic void commuteAbstractMethod() {System.out.println("坐地铁去上班");}
}
/*** 周末* @author zhou*/
public class Weekend extends AbstractTemplate{@Overridepublic void getUp() {System.out.println("今天12点起床");}@Overridepublic void changeClothesAbstractMethod() {System.out.println("不换了");}@Overridepublic void haveMealAbstractMethod() {System.out.println("叫外卖");}@Overridepublic void commuteAbstractMethod() {System.out.println("下午继续睡,不同勤了");}
}
public class Test {public static void main(String[] args) {// 周一Monday monday = new Monday();monday.dailyRoutineTemplateMethod();System.out.println("==============================");// 周末Weekend weekend = new Weekend();weekend.dailyRoutineTemplateMethod();}}
如何在spring中使用
/*** 业务层* 数据层同理* @author zhou*/
public interface MyService {void test();
}
import org.springframework.stereotype.Service;/*** @author zhou*/
@Service
public class MyServiceImpl implements MyService {@Overridepublic void test() {System.out.println("业务");}
}
子类
/*** 周一* @author zhou*/
@Component
public class Monday extends AbstractTemplate{@Overridepublic void changeClothesAbstractMethod() {System.out.println("今天很热啊 穿短袖吧");}@Overridepublic void haveMealAbstractMethod() {System.out.println("早饭吃麦当劳");}@Overridepublic void commuteAbstractMethod() {System.out.println("坐地铁去上班");}
}
父类使用构造方法和ApplicationContext 来注入Bean
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;@Component
public class SpringContextHolder implements ApplicationContextAware {private static ApplicationContext applicationContext;@Autowired@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {SpringContextHolder.applicationContext = applicationContext;}public static ApplicationContext getApplicationContext() {return applicationContext;}public static Object getBean(String name) {return getApplicationContext().getBean(name);}/*** 通过class获取Bean.** @param clazz* @param <T>* @return*/public static <T> T getBean(Class<T> clazz) {return getApplicationContext().getBean(clazz);}/*** 通过name,以及Clazz返回指定的Bean** @param name* @param clazz* @param <T>* @return*/public static <T> T getBean(String name, Class<T> clazz) {return getApplicationContext().getBean(name, clazz);}}
/*** 模板⽅法设计模式* 抽象模板(Abstract Template): 定义⼀个模板⽅法,这个模板⽅法⼀般是⼀个具体⽅法,给出⼀个顶级算法⻣架,* ⽽逻辑⻣架的组成步骤在相应的抽象操作中,推迟到⼦类实现* 模板⽅法:定义了算法的⻣架,按某种顺序调⽤其包含的基本⽅法* 基本⽅法:是整个算法中的⼀个步骤,包括抽象⽅法和具体⽅法* 抽象⽅法:在抽象类中申明,由具体⼦类实现。* 具体⽅法:在抽象类中已经实现,在具体⼦类中 可以继承或重写它* @author zhou*/
public abstract class AbstractTemplate {private MyService myService;public AbstractTemplate () {this.myService= SpringContextHolder.getBean(MyService.class);}/*** 模版⽅法 : 每日日常*/public void dailyRoutineTemplateMethod(){myService.test();getUp();wash();changeClothesAbstractMethod();haveMealAbstractMethod();commuteAbstractMethod();}/*** 具体⽅法*/public void getUp() {System.out.println("6点起床");}/*** 具体⽅法*/public void wash() {System.out.println("洗漱");}/*** 抽象⽅法 换衣服*/public abstract void changeClothesAbstractMethod();/*** 抽象⽅法 吃饭*/public abstract void haveMealAbstractMethod();/*** 抽象⽅法 通勤*/public abstract void commuteAbstractMethod();}
import com.zm.demo4.Monday;
import com.zm.demo4.Weekend;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest
class Demo01ApplicationTests {// 这里可以结合实际场景将策略和工厂模式应用@AutowiredMonday monday;@AutowiredWeekend weekend;@Testvoid contextLoads() {monday.dailyRoutineTemplateMethod();weekend.dailyRoutineTemplateMethod();}}
使用模板方法实现一个省 市 区 乡镇 不同级别的统计
待续~
springboot中使用模板⽅法设计模式-设计模块(六)相关推荐
- 六十四、SpringBoot中的模板引擎Thymeleaf
@Author:Runsen 来源:尚硅谷 下面建议读者学习尚硅谷的B站的SpringBoot视频,我是学雷丰阳视频入门的. 具体链接如下:B站尚硅谷SpringBoot教程 文章目录 使用Sprin ...
- 模块递归拆分法: 设计模式 设计原则,复杂层次设计举例。系统重构 装饰模式,门面模式,代理模式
程序员最牛逼的能力是模块拆分能力, 然后才能利用模块依赖的工具,java 9 或者 runtime期的osgi ,其他maven插件,maven build期. 其他idea插件,类似阿里云的代码规范 ...
- python中的引用法总结_python模块调用总结
1.模块的定义 本质上就是.py结尾的python文件,用来从逻辑上组织python代码(变量,函数,类,逻辑),为了实现一个功能. 2.模块的调用方法 首先编写一个模块文件: 1 name='Tao ...
- JavaWeb学习之路——SpringBoot 中thymeleaf模板用法(三)
thymeleaf模板用法 thymeleaf通过它特定的语法,对HTML的标记做渲染,能够访问后台的动态数据,实现静态html界面的动态化 1.添加架包 <!--引入动态模板-->< ...
- thymeleaf html模块化,SpringBoot中使用Thymeleaf模板开发的后台管理框架
系统简介 JavaWeb专业版,企业级开发框架SpringBoot+Layui+Thymeleaf+MybatisPlus开发权限(RBAC)及内容管理框架,框架中集成了权限管理.模块管理,数据库管理 ...
- java中使用模板设计模式
定义:实现一个算法时,整体步骤很固定.通用,这些步骤已经在父类中写好了 也就是我们干某些东西的时候,都会有固定的步骤,如springboot集成mybatis等和rentranlock中,都是使用了模 ...
- 领域驱动设计模式设计与实践_在域驱动设计中使用状态模式
领域驱动设计模式设计与实践 域驱动设计(DDD)是一种开发软件的方法,其中,通过将实现与核心业务概念的不断发展的模型相联系,解决了问题的复杂性. 该术语是由Eric Evans创造的,并且有一个DDD ...
- ElementUI中显示是否以及SpringBoot中怎样存储实体类属性和数据库怎样设计字段
场景 Vue+ElementUI+SpringBoot+Mysql 需要设计一些属性为是否,即只有两个选择的属性字段. 注: 博客: https://blog.csdn.net/badao_liuma ...
- SpringBoot中整合Mail实现发送模板邮件
场景 项目搭建专栏: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/column/info/35688 实现最简单的带标题以及文本内容的邮件发送: https:/ ...
最新文章
- 体绘制(Volume Rendering)概述介绍
- linux网卡固件名,修改CentOS7网卡名称为传统名称eth0格式
- 在python中、实例变量在类的内部通过_[宜配屋]听图阁
- 1月16日学习内容整理:存储库MongoDB之文档的增删改查操作补充
- 如何高效地远程部署?Fabric 来支招!
- 一加3支持android9吗,不忘老用户!一加3更新Android 9,网友:真的不将就
- 获取阿里云播放器当前播放速率
- Android 用代码Ping网络
- 274-MySQL(查看源码的工具sourceinsight)
- arduino与74HC595驱动8位数码管(含代码)
- 《可复制的领导力》学习总结
- 才在enom注册了10多个域名,就有人想盗我邮箱
- vue项目之UI插件:Element-UI的基本使用
- 【高级数据结构】线段树 | 求区间和
- 十、如何给标识符命名
- c#调用bartender模板打印标签
- 一种灵活可靠的工作方式:组件化设计与开发
- 阿里云ClickHouse海量数据分析
- Android 悬浮窗的使用(2)
- 闲鱼无货源怎样选品,能够做到日入几百?