【设计模式】—— 模板方法Template
时间:2022-04-22
本文章向大家介绍【设计模式】—— 模板方法Template,主要内容包括模式意图、模式结构、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
模式意图
定义一个类的框架,当它有不同的类时,再具体实现。
比如,我们设计一个跨系统的客户端软件,Windows需要一套展现类,Linux需要一套,mac还需要一套。这样,只需要抽取他们的共同操作编程一个框架类,具体使用到哪个系统时,再使用对应的类,有点像C++里面的模板。
应用场景
1 一次性实现一个类的不变部分,其他的部分留到子类实现。
2 各个子类提取公共部分成为超类
3 控制子类的扩展。
模式结构
AbstractClass 抽象类框架
abstract class AbstractClass{
public void action(){
step1();
step2();
newMethod();
}
abstract protected void step1();
abstract protected void step2();
abstract protected void newMethod();
}
Class 具体的子类,进行扩展
class Class1 extends AbstractClass{
protected void newMethod() {
System.out.println("class1 newMethod");
}
protected void step1() {
System.out.println("class1 step1");
}
protected void step2() {
System.out.println("class1 step2");
}
}
class Class2 extends AbstractClass{
protected void newMethod() {
System.out.println("class2 newMethod");
}
protected void step1() {
System.out.println("class2 step1");
}
protected void step2() {
System.out.println("class2 step2");
}
}
全部代码
1 package com.xingoo.test.design.template;
2 abstract class AbstractClass{
3 public void action(){
4 step1();
5 step2();
6 newMethod();
7 }
8 abstract protected void step1();
9 abstract protected void step2();
10 abstract protected void newMethod();
11 }
12 class Class1 extends AbstractClass{
13 protected void newMethod() {
14 System.out.println("class1 newMethod");
15 }
16 protected void step1() {
17 System.out.println("class1 step1");
18 }
19 protected void step2() {
20 System.out.println("class1 step2");
21 }
22 }
23 class Class2 extends AbstractClass{
24 protected void newMethod() {
25 System.out.println("class2 newMethod");
26 }
27 protected void step1() {
28 System.out.println("class2 step1");
29 }
30 protected void step2() {
31 System.out.println("class2 step2");
32 }
33 }
34 public class Client {
35 private static AbstractClass class1 = new Class1();
36 private static AbstractClass class2 = new Class2();
37 public static void main(String[] args) {
38 class1.action();
39 class2.action();
40 }
41 }
运行结果
class1 step1
class1 step2
class1 newMethod
class2 step1
class2 step2
class2 newMethod
- 系统架构 | 基于微服务架构,改造企业核心系统之实践
- 《Redis设计与实现》读书笔记(五) ——Redis中的整数集合
- 《Redis设计与实现》读书笔记(七) ——Redis对象综述及字符串对象实现原理
- 自动登录脚本
- 极致之处,精彩无限 - 优化了一半的SQL
- 编程修炼 | Scala中Stream的应用场景及其实现原理
- Linux之内存描述符mm_struct
- 大数据 | Spark的现状与未来发展
- 信号量、互斥锁、自旋锁、原子操作
- 理解OAuth 2.0
- node.js应用Redis数据库
- apache服务器配置
- udev实现热插拔
- 《Redis设计与实现》读书笔记(九) ——Redis集合和有序集合实现原理
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Tree Shaking概念详解
- Canvas基础教程(章节1)
- Canvas基础教程(章节2)
- CSS文件夹
- Canvas基础教程(章节3)
- 口算训练 HDU - 6287
- Codeforces Round #674 (Div. 3) A ~ F 详细讲解
- C# 生成chart图表的三种方式
- C# Task.Run调用外部参数
- Git全方位指南,即用即查就可
- Python入门教程笔记(二)控制语句
- Python入门教程笔记(一)简介、变量及基本数据类型
- C#知识点讲解之C#delegate、event、Action、EventHandler的使用和区别
- typescript高级用法之infer的理解与使用
- 基于业务场景下的图片/文件上传方案总结