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

场景:

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

开发中常见的场景

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

举例代码实现

  • 场景:银行办理业务:

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

    • 模板类
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();
	}
}
    • 子类
public class Sub1BankTemplateMethod extends BankTemplateMethod{
	@Override
	protected void transact() {
		System.out.println("办理取款业务。。。。。");		
	}
}
public class Sub2BankTemplateMethod extends BankTemplateMethod{
	@Override
	protected void transact() {
		System.out.println("办理存钱业务。。。。。");		
	}
}
    • 客户调用
/**
 * 模板方法模式
 */
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):代理模式
          设计模式持续更新中…

相关推荐

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

    2024-04-02 06:12:02       41 阅读
  2. 设计模式-模板方法模式

    2024-04-02 06:12:02       67 阅读
  3. 设计模式模板方法模式

    2024-04-02 06:12:02       54 阅读
  4. 设计模式——模板方法模式

    2024-04-02 06:12:02       61 阅读
  5. 设计模式: 模板方法模式

    2024-04-02 06:12:02       44 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-02 06:12:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-02 06:12:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-02 06:12:02       87 阅读
  4. Python语言-面向对象

    2024-04-02 06:12:02       96 阅读

热门阅读

  1. .net core 3.1 MySqlHelper(自用)

    2024-04-02 06:12:02       29 阅读
  2. 【Kotlin】匿名类和伴生类

    2024-04-02 06:12:02       36 阅读
  3. 基于mqtt的物联网控制移动应用程序开发

    2024-04-02 06:12:02       38 阅读
  4. Android RecycleView 缓存 itemView 提高滑动流畅度

    2024-04-02 06:12:02       41 阅读
  5. 做题目

    2024-04-02 06:12:02       39 阅读
  6. Android BLE蓝牙扫描系统源码解析学习笔记

    2024-04-02 06:12:02       37 阅读
  7. 关于ffmpeg的安装和编码格式问题

    2024-04-02 06:12:02       30 阅读
  8. Mongodb中一个小巧的数据更新命令$inc

    2024-04-02 06:12:02       30 阅读
  9. hcip-datacom英文词汇积累简述2

    2024-04-02 06:12:02       37 阅读