Java设计模式之模板模式

news/2024/11/16 13:20:06/

1. 模板模式介绍

1、模板模式即模板方法模式自定义了一个操作中的算法骨架,而将步骤延迟到子类中,使得子类可以不改变一个算法的结构,可以自定义该算法的某些特定步骤;
2、父类中提取了公共的部分代码,便于代码复用;
3、部分抽象方法是由子类实现的,子类可以通过方法实现增加相应的功能;
4、为了防止公共骨架方法重写操作,一般公共流程方法上都加有 final 关键字;
5、自定义钩子方法控制公共流程方法某些步骤是否需要执行。

2.模板模式结构类

① 抽象方法:模板抽象类中自定义,由实现类具体实现。
② 具体方法:模板抽象类中非抽象方法(公共流程方法),实现类中可以继承或重写它。
③ 钩子方法:模板抽象类已经实现,用于判断的逻辑方法。实现类决定是否重写此方法,该方法为钩子方法

3.模板模式代码案例

一、模板抽象类

public abstract class IRobotTemplate<T> {// 骨架算法(流程)public final void processExecute(T param) {this.executeGo(param);// 钩子方法决定是否执行(默认不执行)if (this.isOpen()) {this.executeRun(param);}}// 步骤1-待实现public abstract void executeRun(T param);// 步骤2-待实现public abstract void executeGo(T param);// 钩子方法public boolean isOpen() {return false;}
}

二、模板实现类

@Component
public class RobotTemplate extends IRobotTemplate<UserInfo> {@Overridepublic void executeRun(UserInfo userInfo) {System.out.println(userInfo.getUsername() + "会跑步");}@Overridepublic void executeGo(UserInfo userInfo) {System.out.println(userInfo.getUsername() + "会走路");}@Overridepublic boolean isOpen() {return true; // 重写钩子方法;使执行executeRun方法}
}

三、运行模板模式

@Resource
private IRobotTemplate robotTemplate;@Override
public void process(UserInfo userInfo) {userInfo = new UserInfo();userInfo.setUsername("机器人小智");// 执行模板抽象类中的公共流程方法robotTemplate.processExecute(userInfo);
}

四、执行结果

在这里插入图片描述


http://www.ppmy.cn/news/933724.html

相关文章

《自己动手设计物联网》已在各大书城有售

号外号外&#xff0c;《自己动手设计物联网》已经在各大书城有售啦~ 购买地址如下&#xff1a; 亚马逊&#xff1a;https://www.amazon.cn/dp/B01IBZWTWW&#xff08;戳阅读原文即可访问&#xff09; 京东&#xff1a;http://item.jd.com/11946585.html&#xff08;复制到浏览器…

没有人能随随便便成功,但没有必要活得像尘埃一样卑微

1. 我敢打赌&#xff0c;你一定对小罗伯特唐尼饰演的钢铁侠印象深刻。这个天赋异禀的纨绔子弟在被恐怖分子袭击后&#xff0c;不断改进升级他的盔甲&#xff0c;然后“躲进去”化身钢铁侠&#xff0c;从而作为一名义务警察来保卫世界和平。不过无所不能、正义凛然的钢铁侠只能…

你还记得那些曾经为腾讯企鹅军团做的贡献吗?

深圳市腾讯计算机系统有限公司成立于1998年11月&#xff0c;居然比我还小七八岁。企鹅军团目前世界500强排名237位&#xff0c;截止今日市值32583.72亿&#xff0c;全球市值排名第8位&#xff0c;而我目前身家好几十块&#xff0c;你们呢&#xff1f; 从最初的移动通讯地位——…

一切的闹闹哄哄,只是他在水帘洞躲避风沙那晚做的一个梦

送同学走之后&#xff0c;我在路边默默的站了有五分钟&#xff0c;突然觉得我无处可去&#xff0c;有一种深入骨髓的悲哀和无奈&#xff0c;然后我就想起了一个命题&#xff0c;“如今的你&#xff0c;何去何从&#xff01;”我不知道为什么会突然想到这样一个命题&#xff0c;…

Ubuntu开机自启动设置

一、创建执行脚本 这里有两个程序所以编写了两个脚本&#xff0c;第一脚本(master.sh)&#xff1a; gnome-terminal -- bash -c "source /home/zyy/anaconda3/bin/activate wood2;cd /home/zyy/pycharmProject/master_program;python main.py > /home/zyy/pycharmProj…

21.Java 抽象类

抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。 由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计抽象类 在 Java 中抽象类表示的是一种继承关系,…

局域网群聊工具

这篇文章所要讲的局域网聊天工具是基于udp协议的&#xff0c;至于为什仫要使用udp协议&#xff0c;当然是为了更加深入的理解socket套接字编程了。有的读者就会问了那你为什仫不用tcp协议呢&#xff1f;因为之前已经写过了一个关于tcp协议的项目了啊。 http服务器 一、聊天室的…

局域网聊天9月局域网聊天

摘要&#xff1a;2012年06月07日局域网聊天9月局域网聊天遗诏命皇太孙朱允炆继位&#xff0c;我的小乌龟太胆小了&#xff0c;缩略图标题内容2007年5月3日下午&#xff0c;孔老汉赶忙放下手中的活儿循声望去&#xff0c;轻轻一碰鱼缸&#xff0c;山东济南济南市历城区双语学校二…