23种设计模式之模板模式
文章目录
- 概述
- 模版模式的优缺点
- 优点
- 缺点
- 模版模式的使用场景
- 模板模式的结构和实现
- 模式结构
- 模式实现
- 总结
概述
模板模式指:一个抽象类中,有一个主方法,再定义1…n个方法,可以是抽象的,也可以是实际的方法,定义一个类,继承该抽象类,重写抽象方法,通过调用抽象类,实现对子类的调用。
模板方法模式是一种只需使用继承就可以实现的非常简单的模式。
模版模式的优缺点
优点
- 封装不变的部分,将不变的部分抽取出来;
- 扩展可变部分,将可变的设置抽象方法,让具体子类来实现。
- 抽取的公共代码,便于后期维护
- 行为有基类来控制,具体操作有子类实现。
缺点
- 每一个不同的实现都需要有一个子类来实现,这样就会导致类的数量大大的增加,使得系统更加庞大。
模版模式的使用场景
在软件设计中,有些功能很类似,只是在某些环节不同而已。大多数环节都是相同的时候,可以使用模板模式。将通用的算法或者步骤抽取到抽象类中,在具体子类中实现具体特定的操作
模板模式的结构和实现
模式结构
模板方法模式由两部分结构组成
第一部分是抽象父类
第二部分是具体的实现子类。
通常在抽象父类中封装了子类的算法框架,包括实现一些公共方法以及封装子类中所有方法的执行顺序。子类通过继承这个抽象类,也继承了整个算法结构,并且可以选择重写父类的方法。
模式实现
我们将创建一个定义操作的 Game 抽象类,其中,模板方法设置为 final,这样它就不会被重写。Cricket 和 Football 是扩展了 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种设计模式之模板模式相关推荐
- 23种设计模式——装饰者模式
文章目录 23种设计模式--装饰者模式 1.装饰者模式概述 2.装饰者模式的结构 3.装饰者模式的实现 4.装饰者模式的应用场景 23种设计模式--装饰者模式 1.装饰者模式概述 背景 有些人为了早上 ...
- 实践GoF的23种设计模式:建造者模式
本文分享自华为云社区<[Go实现]实践GoF的23种设计模式:建造者模式>,作者: 元闰子. 简述 在程序设计中,我们会经常遇到一些复杂的对象,其中有很多成员属性,甚至嵌套着多个复杂的对象 ...
- 【Go实现】实践GoF的23种设计模式:命令模式
上一篇:[Go实现]实践GoF的23种设计模式:代理模式 简单的分布式应用系统(示例代码工程):https://github.com/ruanrunxue/Practice-Design-Patter ...
- 23种设计模式7_代理模式之一静态代理
23种设计模式7_代理模式之一静态代理 1 基本介绍 代理模式:为其他对象提供一种代理以控制对这个对象的访问 代理模式也叫委托模式,它是一项基本设计技巧.许多其他的模式,如状态模式.策略模式.访问者模 ...
- 23种设计模式之命令模式和策略模式的区别
文章目录 概述 命令模式 策略模式 相同点 总结 概述 命令模式和策略模式确实很相似,只是命令模式多了一个接收者(Receiver)角色.它们虽然同为行为类模式,但是两者的区别还是很明显的.策略模式的 ...
- 23种设计模式之代理模式
文章目录 代理模式的定义与特点 代理模式的结构与实现 模式的结构 模式的实现 代理模式的应用场景 代理模式的应用实例 代理模式的扩展 代理模式分类 静态代理 动态代理 在有些情况下,一个客户不能或者不 ...
- 23种设计模式----中介者模式----行为型模式
中介者模式 1.什么是中介者模式 2.中介者模式的角色 3.例子 3.1 项目结构 3.2 共同实体 3.3 抽象的中介者 3.4 抽象的被中介者 3.5 具体的中介者 3.6 具体的被中介者 3.7 ...
- 2.5万字详解23种设计模式—创建型模式(简单工厂、工厂方法、抽象工厂、单例-多线程安全详解、建造者、原型)的详细解读、UML类图
本文简述了各大设计模式,并通过UML和代码详细说明.本文大约共 2.5W 字,建议收藏.下方是本文的目录: 一.设计模式的认识 二.设计模式的分类 根据其目的 根据范围 三.设计模式的优点 四.设计模 ...
- 在王者荣耀角度下分析面向对象程序设计B中23种设计模式之模板方法模式
· 模板方法模式在王者荣耀中的应用 · 一.简述 在王者荣耀中,有查看所有英雄功能,并且玩家在查看英雄时可以对英雄的排序做调整.具体而言,玩家可以按照默认排序.名称排序.熟练度排序.上架时间排序.荣耀 ...
最新文章
- 【每日一算法】二叉树中所有距离为 K 的结点
- LeftoverDataException.
- python手机版下载3.7.3-QPython3手机版下载
- STC89C52单片机 点亮两个数码管,可以显示 00——10 共 11 个数字
- PAT甲级1085 Perfect Sequence :[C++题解]双指针
- Fabricjs在Canvas上使用路径Path绘制不规则图形
- c++TCP的三次握手和四次挥手
- 《Forward团队-爬虫豆瓣top250项目-设计文档》
- 微信小程序canvas动态时钟
- python log日志_Python中logging日志的四个等级和使用
- get_metrology_object_result_contour查询计量对象的结果轮廓
- CentOS 6.8 安装JDK8
- oracle numlist,oracle sql str2numlist numtabletype
- 文学系列:《叶之震颤》读书笔记
- Mint-UI组件 MessageBox为prompt 添加判断条件
- linux安装文泉驿字体,centos 安装文泉驿字体相关教程
- Vue history模式添加前缀 Nginx配置
- 打印zigtag矩阵
- HTML5 新的Input类型
- 拉上谷歌高通 三星围攻苹果
热门文章
- IntPtr 转 string
- 中海达数据怎么转rinex_GPS-OEM原始数据向Rinex格式转换的方法
- xp计算机上的共享文档说是拒绝访问,共享文件夹 拒绝访问
- 文档错别字处理方案——WPS拼写检查与文档校对
- HTML中style/css/color设置颜色值(RGB值)的几种方法(常见颜色和色值)
- 防盗家用智能指纹锁方案
- 苹果在中国市场逆袭中国手机,市场份额增幅居于第一名!
- html 赛龙舟游戏,亲子游戏《赛龙舟》旱地龙舟
- ubuntu DBUS 收集
- Xilinx ISE系列教程(4):ChipScope逻辑分析仪ICON、ILA、VIO使用