系列文章目录


文章目录

  • 系列文章目录
  • 前言
  • 一、模板模式
  • 二、主要角色
    • 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. 优点:

  1. 封装不变部分,扩展可变部分。
  2. 提取公共代码,便于维护。
  3. 行为由父类控制,子类实现。

2. 缺点:

  1. 每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大。

参考文档

Java设计模式 - 模板模式

Spring中用到的九种设计模式五:模板模式相关推荐

  1. Spring中用到的九种设计模式

    spring中常用的设计模式达到九种,我们举例说明: 第一种:简单工厂 又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一.  简单工厂模式的实质是由 ...

  2. spring中用到的9种设计模式

    spring中用到了9种设计模式,学习spring的源码以及设计模式,可以提高开发人员软件设计以及开发的水平,写出更加优雅的代码. 文章目录 简单工厂(非23种设计模式中的一种) 工厂方法 单例模式 ...

  3. 详解spring用到的九种设计模式

    转载请注明出处,文章首发于:http://www.itxxz.com/a/javashili/tuozhan/2014/0601/7.html 设计模式作为工作学习中的枕边书,却时常处于勤说不用的尴尬 ...

  4. 23种设计模式之模板模式

    文章目录 概述 模版模式的优缺点 优点 缺点 模版模式的使用场景 模板模式的结构和实现 模式结构 模式实现 总结 概述 模板模式指:一个抽象类中,有一个主方法,再定义1-n个方法,可以是抽象的,也可以 ...

  5. Java实现23种设计模式(五):桥接模式

    二十三种设计模式分类 一.概述 桥接(Bridge)模式的定义如下:将抽象与实现分离,使它们可以独立变化.它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度.桥接模式主要想实 ...

  6. Spring主要用到两种设计模式

    Spring主要用到两种设计模式 1.工厂模式 Spring容器就是实例化和管理全部Bean的工厂. 工厂模式可以将Java对象的调用者从被调用者的实现逻辑中分离出来. 调用者只关心被调用者必须满足的 ...

  7. 盘点常用的九种设计模式

    单例模式 单例模式是指一个类在一个进程中只有一个实例对象(但也不一定,比如Spring中的Bean的单例是指在一个容器中是单例的) 单例模式创建分为饿汉式和懒汉式,总共大概有8种写法.但是在开源项目中 ...

  8. 二十三种设计模式之原型模式

    今天继续探讨GOF二十三种设计模式的原型模式,原型模式也是属于创建型模式的一种 原型模式通俗的讲就是对象复制的过程,即通过一个原型对象,我可以得到一个该对象的克隆. 下面来看下原型模式的第一种写法-- ...

  9. 「设计模式(五) - 代理模式」

    「设计模式(五) - 代理模式」 一.处处可见的"代理" "代理"在平常生活司空见惯,点外卖,租房子找中介,买飞机票等等.基本上用手机就能完成,也就是不直接接触 ...

最新文章

  1. 《编写可维护的JavaScript》——1.7 直接量
  2. 2018.03.03、android-照虎画猫搭建简易Rest服务器
  3. 适合自学python的图书-有哪些适合零编程基础的人学习Python的书?
  4. Codeforces Round #220 (Div. 2)
  5. Python ORM框架之 Peewee入门
  6. Luogu 4755 Beautiful Pair
  7. 利用sdkman安装kotlin和java环境
  8. 算法导论18.1-4
  9. e路航 LH900N地图升级
  10. WordPress清理和优化数据库,推荐几个优秀插件
  11. OKA通证权益解析,参与Okaleido生态建设的不二之选
  12. java mongo gte_java-如何操作$concat使用spring mongodb
  13. murmurHash使用方法
  14. 一篇文章学会日志logback的使用
  15. 旋转变压器简介、工作原理及分类
  16. jsp成绩分析管理系统myeclipse编程java语言sqlserver数据库
  17. 【AIMP3】推荐一款Windows下的优质音乐播放器
  18. 深兰交大人工智能培训5期笔记总结
  19. 气缸标识上vr什么意思_dohc发动机是什么意思(发动机的这个标识DOHC是什么意思?)...
  20. mac上 go build的二进制文件在Linux上运行提示cannot execute binary file或者-bash: ./sayHello: 无法执行二进制文件的解决方式

热门文章

  1. 使用纯CSS3创建一个纺锤形分隔线
  2. 五十七、如何求出两个数的最小公倍数?
  3. *** No rule to make target 'net/ipv4/netfilter/ipt_ecn.c'
  4. 【maven】最全Maven详解,看这一篇就够啦
  5. halcon图像与区域缩放
  6. 【抽象代数】伽罗瓦理论简介
  7. 水平和因素是什么_血脂是什么?高血脂对身体有何危害?一篇长文为你详解
  8. 软件测试基本功之——概念篇
  9. 数据+AI技术,赋能企业业务和管理流程
  10. TP-link wr886N路由器上网时快时慢的解决办法