设计模式(13):模板方法模式

场景:

  • 实现一个功能时,整体步骤很固定,但是,某些部分易变。易变部分可以抽象出来,供子类实现。

开发中常见的场景

  • 非常繁琐,各个框架,类库中都有它的影子,比如常见的有:
    • 数据库访问的封装
    • Junit单元测试
    • servlet中关于doGet/doPost方法调用
    • spring框架中各种Template
    • shire中权限认证和授权都用到了模板方法模式。

举例代码实现

场景:银行办理业务:

  • 1.取号;
  • 2.办理业务/取钱/转账/企业/个人...
  • 3.给工作人员评分

代码实现

    • 模板类
java 复制代码
public abstract class BankTempLateMethod {
	//具体方法
	public void takeNumber(){
		System.out.println("排队取号。。。。。");
	}
	public abstract void transact(); //办理具体的业务     钩子方法
	//具体方法
	public void evaluate(){
		System.out.println("反馈评分。。。。。");
	}
	//模板方法
	public final void process(){
		takeNumber();
		transact();
		evaluate();
	}
}
    • 子类
java 复制代码
public class Sub1BankTemplateMethod extends BankTemplateMethod{
	@Override
	protected void transact() {
		System.out.println("办理取款业务。。。。。");		
	}
}
public class Sub2BankTemplateMethod extends BankTemplateMethod{
	@Override
	protected void transact() {
		System.out.println("办理存钱业务。。。。。");		
	}
}
    • 客户调用
java 复制代码
/**
 * 模板方法模式
 */
public class App {
	public static void main(String[] args) {
		BankTemplateMethod bankTemplateMethod1 = new Sub1BankTemplateMethod();
		bankTemplateMethod1.process();
		System.out.println("--------------------------------------------------");
		BankTemplateMethod bankTemplateMethod2 = new Sub2BankTemplateMethod();
		bankTemplateMethod2.process();
	}
}

更多设计模式学习:

设计模式(1):介绍

设计模式(2):单例模式

设计模式(3):工厂模式

设计模式(4):建造者模式

设计模式(5):原型模式

设计模式(6):桥接模式

设计模式(7):装饰器模式

设计模式(8):组合模式

设计模式(9):外观模式

设计模式(10):享元模式

设计模式(11):适配器模式

设计模式(12):代理模式

设计模式持续更新中...

相关推荐
蜂蜜黄油呀土豆几秒前
ThreadLocal 深度解析:它解决了什么、原理是什么、如何正确使用(含代码与实战建议)
java·并发编程·内存泄漏·threadlocal
毕设源码-郭学长5 分钟前
【开题答辩全过程】以 高校教室管理系统为例,包含答辩的问题和答案
java·spring boot
罗不丢7 分钟前
UTC,Date,LocalDate转换问题解决方法
java
Klong.k10 分钟前
谈谈session、application存储对象
java·tomcat
Moe48810 分钟前
Spring Boot启动魔法:SpringApplication.run()源码全流程拆解
java·后端·面试
阿杰AJie12 分钟前
Java 常见场景中需要使用 try 的示例集
java·后端
0***v77712 分钟前
JavaWeb项目打包、部署至Tomcat并启动的全程指南(图文详解)
java·tomcat
老华带你飞35 分钟前
房屋租赁管理|基于springboot + vue房屋租赁管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·毕设
凛_Lin~~1 小时前
安卓 Java线程八股文 (线程、多线程、线程池、线程安全)
android·java·开发语言
哈哈哈笑什么1 小时前
企业级CompletableFuture并行化完整方案,接口从10s到100ms
java·后端·spring cloud