Spring中用到的九种设计模式五:模板模式
系列文章目录
文章目录
- 系列文章目录
- 前言
- 一、模板模式
- 二、主要角色
- 1. AbstractTemplate(抽象模板):
- 2. ConcreteTemplate(具体模板):
- 三、代码实现与示例
- 四、优缺点:
- 1. 优点:
- 2. 缺点:
- 参考文档
前言
一、模板模式
在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。
二、主要角色
1. AbstractTemplate(抽象模板):
- 定义了一个或多个抽象操作,以便让子类实现。这些抽象操作叫做基本操作,它们是一个顶级逻辑的组成步骤。
- 定义并实现了一个模板方法。这个模板方法一般是一个具体方法,它给出了一个顶级逻辑的骨架,而逻辑的组成步骤在相应的抽象操作中,推迟到子类实现。顶级逻辑也有可能调用一些具体方法。
2. ConcreteTemplate(具体模板):
- 实现父类所定义的一个或多个抽象方法,它们是一个顶级逻辑的组成步骤。
- 每一个抽象模板角色都可以有任意多个具体模板角色与之对应,而每一个具体模板角色都可以给出这些抽象方法(也就是顶级逻辑的组成步骤)的不同实现,从而使得顶级逻辑的实现各不相同。
三、代码实现与示例
我们将创建一个定义操作的 Game 抽象类,其中,模板方法设置为 final,这样它就不会被重写。Cricket 和 Football 是扩展了 Game 的实体类,它们重写了抽象类的方法。
创建一个抽象类,它的模板方法被设置为 final。
public abstract class Game {abstract void initialize();abstract void startPlay();abstract void endPlay();//模板public final void play(){//初始化游戏initialize();//开始游戏startPlay();//结束游戏endPlay();}
}
创建扩展了上述类的实体类。
public class Cricket extends Game {@Overridevoid endPlay() {System.out.println("Cricket Game Finished!");}@Overridevoid initialize() {System.out.println("Cricket Game Initialized! Start playing.");}@Overridevoid startPlay() {System.out.println("Cricket Game Started. Enjoy the game!");}
}
public class Football extends Game {@Overridevoid endPlay() {System.out.println("Football Game Finished!");}@Overridevoid initialize() {System.out.println("Football Game Initialized! Start playing.");}@Overridevoid startPlay() {System.out.println("Football Game Started. Enjoy the game!");}
}
使用 Game 的模板方法 play() 来演示游戏的定义方式。
public class TemplatePatternDemo {public static void main(String[] args) {Game game = new Cricket();game.play();System.out.println();game = new Football();game.play(); }
}
执行程序,输出结果:
Cricket Game Initialized! Start playing.
Cricket Game Started. Enjoy the game!
Cricket Game Finished!Football Game Initialized! Start playing.
Football Game Started. Enjoy the game!
Football Game Finished!
四、优缺点:
1. 优点:
- 封装不变部分,扩展可变部分。
- 提取公共代码,便于维护。
- 行为由父类控制,子类实现。
2. 缺点:
- 每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大。
参考文档
Java设计模式 - 模板模式
Spring中用到的九种设计模式五:模板模式相关推荐
- Spring中用到的九种设计模式
spring中常用的设计模式达到九种,我们举例说明: 第一种:简单工厂 又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一. 简单工厂模式的实质是由 ...
- spring中用到的9种设计模式
spring中用到了9种设计模式,学习spring的源码以及设计模式,可以提高开发人员软件设计以及开发的水平,写出更加优雅的代码. 文章目录 简单工厂(非23种设计模式中的一种) 工厂方法 单例模式 ...
- 详解spring用到的九种设计模式
转载请注明出处,文章首发于:http://www.itxxz.com/a/javashili/tuozhan/2014/0601/7.html 设计模式作为工作学习中的枕边书,却时常处于勤说不用的尴尬 ...
- 23种设计模式之模板模式
文章目录 概述 模版模式的优缺点 优点 缺点 模版模式的使用场景 模板模式的结构和实现 模式结构 模式实现 总结 概述 模板模式指:一个抽象类中,有一个主方法,再定义1-n个方法,可以是抽象的,也可以 ...
- Java实现23种设计模式(五):桥接模式
二十三种设计模式分类 一.概述 桥接(Bridge)模式的定义如下:将抽象与实现分离,使它们可以独立变化.它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度.桥接模式主要想实 ...
- Spring主要用到两种设计模式
Spring主要用到两种设计模式 1.工厂模式 Spring容器就是实例化和管理全部Bean的工厂. 工厂模式可以将Java对象的调用者从被调用者的实现逻辑中分离出来. 调用者只关心被调用者必须满足的 ...
- 盘点常用的九种设计模式
单例模式 单例模式是指一个类在一个进程中只有一个实例对象(但也不一定,比如Spring中的Bean的单例是指在一个容器中是单例的) 单例模式创建分为饿汉式和懒汉式,总共大概有8种写法.但是在开源项目中 ...
- 二十三种设计模式之原型模式
今天继续探讨GOF二十三种设计模式的原型模式,原型模式也是属于创建型模式的一种 原型模式通俗的讲就是对象复制的过程,即通过一个原型对象,我可以得到一个该对象的克隆. 下面来看下原型模式的第一种写法-- ...
- 「设计模式(五) - 代理模式」
「设计模式(五) - 代理模式」 一.处处可见的"代理" "代理"在平常生活司空见惯,点外卖,租房子找中介,买飞机票等等.基本上用手机就能完成,也就是不直接接触 ...
最新文章
- 《编写可维护的JavaScript》——1.7 直接量
- 2018.03.03、android-照虎画猫搭建简易Rest服务器
- 适合自学python的图书-有哪些适合零编程基础的人学习Python的书?
- Codeforces Round #220 (Div. 2)
- Python ORM框架之 Peewee入门
- Luogu 4755 Beautiful Pair
- 利用sdkman安装kotlin和java环境
- 算法导论18.1-4
- e路航 LH900N地图升级
- WordPress清理和优化数据库,推荐几个优秀插件
- OKA通证权益解析,参与Okaleido生态建设的不二之选
- java mongo gte_java-如何操作$concat使用spring mongodb
- murmurHash使用方法
- 一篇文章学会日志logback的使用
- 旋转变压器简介、工作原理及分类
- jsp成绩分析管理系统myeclipse编程java语言sqlserver数据库
- 【AIMP3】推荐一款Windows下的优质音乐播放器
- 深兰交大人工智能培训5期笔记总结
- 气缸标识上vr什么意思_dohc发动机是什么意思(发动机的这个标识DOHC是什么意思?)...
- mac上 go build的二进制文件在Linux上运行提示cannot execute binary file或者-bash: ./sayHello: 无法执行二进制文件的解决方式