首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
SAAS
ToB门户
了解全球最新的ToB事件
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
微博
Follow
记录
Doing
博客
Blog
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
排行榜
Ranklist
相册
Album
应用中心
qidao123.com ToB IT社区-企服评测·应用市场
»
论坛
›
数据库
›
分布式数据库
›
模板方法模式(Template)
返回列表
发新帖
模板方法模式(Template)
[复制链接]
发表于 2025-11-2 22:47:32
|
显示全部楼层
|
阅读模式
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
×
一、模板方法的界说:
在操纵中界说业务逻辑框架,包罗业务逻辑的方法就是模板方法,模板方法答应子类在不改变原有业务逻辑的流程下,对某些步调举行扩展和修改;
是一种基于继承的
代码
复用技能,是一种类运动模式(基于类的,继承关系的,也就是在模板方法模式中,只存在子类和父类的关系),通过继承来复用和扩展父类的
功能
;重要就是用来进步步伐
代码
的复用性和扩展性的;
Template方法也可以明白为钩子函数和回调函数(hook);
二、UML
三、实现
1、抽象模板
package com.zhucl.templates;
/**
* 案例:模拟把大象(或其他)装进冰箱
* <p>
* 抽象的模板类
*/
public abstract class AbstractTemplate {
//冰箱门是否开启,默认关闭
protected boolean doorIsOpen = false;
void openFridgeDoor() {
System.out.println("打开冰箱门~");
doorIsOpen = true;
}
abstract void putSomethingOn(String key);
void closedFridgeDoor() {
System.out.println("关上冰箱门~");
doorIsOpen = true;
}
void template(String something) {
//开始进行把东西装进冰箱的动作,如果东西不为null,则打开冰箱门,把东西装进去,最后关闭冰箱门
System.out.println("开始进行把东西装进冰箱的动作~");
if (something != null) {
openFridgeDoor();
putSomethingOn(something);
}
if (!this.doorIsOpen) {
closedFridgeDoor();
}
System.out.println("冰箱门是否开启:" + doorIsOpen);
}
}
复制
代码
2、详细实现
package com.zhucl.templates;
/**
* 把肉装进冰箱的具体实现
*/
public class ConcreteMeatsTemplate extends AbstractTemplate {
@Override
void putSomethingOn(String meats) {
System.out.println("把肉装进冰箱~" + meats);
}
}
复制代码
package com.zhucl.templates;
public class ConcreteMilkTemplate extends AbstractTemplate {
@Override
void putSomethingOn(String key) {
System.out.println("把奶装进冰箱~" + key);
}
}
复制代码
package com.zhucl.templates;
public class ConcreteEggsTemplate extends AbstractTemplate {
@Override
void putSomethingOn(String key) {
System.out.println("把蛋装进冰箱~" + key);
}
}
复制代码
3、客户端调用
package com.zhucl.templates;
/**
* 客户端调用
*/
public class TemplateClient {
public static void main(String[] args) {
AbstractTemplate t1 = new ConcreteMeatsTemplate();
t1.template("菲力");
System.out.println("t1的冰箱门是否关闭:" + t1.doorIsOpen);
System.out.println("====================");
AbstractTemplate t2 = new ConcreteMilkTemplate();
t2.template("安佳牛奶");
System.out.println("t2的冰箱门是否关闭:" + t2.doorIsOpen);
System.out.println("====================");
AbstractTemplate t3 = new ConcreteEggsTemplate();
t3.putSomethingOn("可生食鸡蛋");
System.out.println("t3的冰箱门是否关闭:" + t3.doorIsOpen);
}
}
复制代码
回复
使用道具
举报
返回列表
浏览过的版块
Java
前端开发
DevOps与敏捷开发
物联网
开源技术
向量数据库
Oracle
云原生
人工智能
十念
+ 我要发帖
登录后关闭弹窗
登录参与点评抽奖 加入IT实名职场社区
去登录
微信订阅号
微信服务号
微信客服(加群)
H5
小程序
快速回复
返回顶部
返回列表