文章目录

  • 概述
  • 模版模式的优缺点
    • 优点
    • 缺点
  • 模版模式的使用场景
  • 模板模式的结构和实现
    • 模式结构
    • 模式实现
  • 总结

概述

模板模式指:一个抽象类中,有一个主方法,再定义1…n个方法,可以是抽象的,也可以是实际的方法,定义一个类,继承该抽象类,重写抽象方法,通过调用抽象类,实现对子类的调用。

模板方法模式是一种只需使用继承就可以实现的非常简单的模式。

模版模式的优缺点

优点

  • 封装不变的部分,将不变的部分抽取出来;
  • 扩展可变部分,将可变的设置抽象方法,让具体子类来实现。
  • 抽取的公共代码,便于后期维护
  • 行为有基类来控制,具体操作有子类实现。

缺点

  • 每一个不同的实现都需要有一个子类来实现,这样就会导致类的数量大大的增加,使得系统更加庞大。

模版模式的使用场景

在软件设计中,有些功能很类似,只是在某些环节不同而已。大多数环节都是相同的时候,可以使用模板模式。将通用的算法或者步骤抽取到抽象类中,在具体子类中实现具体特定的操作

模板模式的结构和实现

模式结构

模板方法模式由两部分结构组成

第一部分是抽象父类

第二部分是具体的实现子类。

通常在抽象父类中封装了子类的算法框架,包括实现一些公共方法以及封装子类中所有方法的执行顺序。子类通过继承这个抽象类,也继承了整个算法结构,并且可以选择重写父类的方法。

模式实现

我们将创建一个定义操作的 Game 抽象类,其中,模板方法设置为 final,这样它就不会被重写。CricketFootball 是扩展了 Game 的实体类,它们重写了抽象类的方法。

TemplatePatternDemo,我们的演示类使用 Game 来演示模板模式的用法。

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!");}
}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、提取公共代码,便于维护。 3、行为由父类控制,子类实现。

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

使用场景: 1、有多个子类共有的方法,且逻辑相同。 2、重要的、复杂的方法,可以考虑作为模板方法。

注意事项: 为防止恶意操作,一般模板方法都加上 final 关键词。

更多请移驾。。。

23种设计模式之模板模式相关推荐

  1. 23种设计模式——装饰者模式

    文章目录 23种设计模式--装饰者模式 1.装饰者模式概述 2.装饰者模式的结构 3.装饰者模式的实现 4.装饰者模式的应用场景 23种设计模式--装饰者模式 1.装饰者模式概述 背景 有些人为了早上 ...

  2. 实践GoF的23种设计模式:建造者模式

    本文分享自华为云社区<[Go实现]实践GoF的23种设计模式:建造者模式>,作者: 元闰子. 简述 在程序设计中,我们会经常遇到一些复杂的对象,其中有很多成员属性,甚至嵌套着多个复杂的对象 ...

  3. 【Go实现】实践GoF的23种设计模式:命令模式

    上一篇:[Go实现]实践GoF的23种设计模式:代理模式 简单的分布式应用系统(示例代码工程):https://github.com/ruanrunxue/Practice-Design-Patter ...

  4. 23种设计模式7_代理模式之一静态代理

    23种设计模式7_代理模式之一静态代理 1 基本介绍 代理模式:为其他对象提供一种代理以控制对这个对象的访问 代理模式也叫委托模式,它是一项基本设计技巧.许多其他的模式,如状态模式.策略模式.访问者模 ...

  5. 23种设计模式之命令模式和策略模式的区别

    文章目录 概述 命令模式 策略模式 相同点 总结 概述 命令模式和策略模式确实很相似,只是命令模式多了一个接收者(Receiver)角色.它们虽然同为行为类模式,但是两者的区别还是很明显的.策略模式的 ...

  6. 23种设计模式之代理模式

    文章目录 代理模式的定义与特点 代理模式的结构与实现 模式的结构 模式的实现 代理模式的应用场景 代理模式的应用实例 代理模式的扩展 代理模式分类 静态代理 动态代理 在有些情况下,一个客户不能或者不 ...

  7. 23种设计模式----中介者模式----行为型模式

    中介者模式 1.什么是中介者模式 2.中介者模式的角色 3.例子 3.1 项目结构 3.2 共同实体 3.3 抽象的中介者 3.4 抽象的被中介者 3.5 具体的中介者 3.6 具体的被中介者 3.7 ...

  8. 2.5万字详解23种设计模式—创建型模式(简单工厂、工厂方法、抽象工厂、单例-多线程安全详解、建造者、原型)的详细解读、UML类图

    本文简述了各大设计模式,并通过UML和代码详细说明.本文大约共 2.5W 字,建议收藏.下方是本文的目录: 一.设计模式的认识 二.设计模式的分类 根据其目的 根据范围 三.设计模式的优点 四.设计模 ...

  9. 在王者荣耀角度下分析面向对象程序设计B中23种设计模式之模板方法模式

    · 模板方法模式在王者荣耀中的应用 · 一.简述 在王者荣耀中,有查看所有英雄功能,并且玩家在查看英雄时可以对英雄的排序做调整.具体而言,玩家可以按照默认排序.名称排序.熟练度排序.上架时间排序.荣耀 ...

最新文章

  1. 【每日一算法】二叉树中所有距离为 K 的结点
  2. LeftoverDataException.
  3. python手机版下载3.7.3-QPython3手机版下载
  4. STC89C52单片机 点亮两个数码管,可以显示 00——10 共 11 个数字
  5. PAT甲级1085 Perfect Sequence :[C++题解]双指针
  6. Fabricjs在Canvas上使用路径Path绘制不规则图形
  7. c++TCP的三次握手和四次挥手
  8. 《Forward团队-爬虫豆瓣top250项目-设计文档》
  9. 微信小程序canvas动态时钟
  10. python log日志_Python中logging日志的四个等级和使用
  11. get_metrology_object_result_contour查询计量对象的结果轮廓
  12. CentOS 6.8 安装JDK8
  13. oracle numlist,oracle sql str2numlist numtabletype
  14. 文学系列:《叶之震颤》读书笔记
  15. Mint-UI组件 MessageBox为prompt 添加判断条件
  16. linux安装文泉驿字体,centos 安装文泉驿字体相关教程
  17. Vue history模式添加前缀 Nginx配置
  18. 打印zigtag矩阵
  19. HTML5 新的Input类型
  20. 拉上谷歌高通 三星围攻苹果

热门文章

  1. IntPtr 转 string
  2. 中海达数据怎么转rinex_GPS-OEM原始数据向Rinex格式转换的方法
  3. xp计算机上的共享文档说是拒绝访问,共享文件夹 拒绝访问
  4. 文档错别字处理方案——WPS拼写检查与文档校对
  5. HTML中style/css/color设置颜色值(RGB值)的几种方法(常见颜色和色值)
  6. 防盗家用智能指纹锁方案
  7. 苹果在中国市场逆袭中国手机,市场份额增幅居于第一名!
  8. html 赛龙舟游戏,亲子游戏《赛龙舟》旱地龙舟
  9. ubuntu DBUS 收集
  10. Xilinx ISE系列教程(4):ChipScope逻辑分析仪ICON、ILA、VIO使用