设计模式----模板方法模式
概述
模板模式(Template Pattern),一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。
是基于继承的代码复用的基本技术。一个抽象类中,有一个主方法,再定义1…n个方法,可以是抽象的,也可以是实际的方法,继承该抽象类,重写抽象方法,通过调用抽象类,实现对子类的调用。
涉及角色
- AbstractClass
抽象类:定义抽象操作,以便让子类实现,是一个顶级逻辑的组成部分;定义并实现了一个模板方法,是一个顶级逻辑的框架 - ConcreteClass
具体类:实现父类所定义的抽象方法
UML
使用场景
- 有多个子类共有的方法,且逻辑相同
- 复杂的方法,可以考虑作为模板方法,对其行分割
优点
- 封装不变部分,扩展可变部分,子类实现算法的某些细节,有助于算法的扩展
- 提取公共代码,实现了代码复用,便于维护
- 行为由父类控制,子类实现
缺点
- 每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大,需要花更多的时间去理清类之间的关系
代码示例
比如观看DVD:流程是打开总电源、打开电视电源、操作dvd…… ,比如其中操作dvd根据习惯有的不使用遥控器直接操作DVD,也有人习惯使用遥控器操作DVD,这部分需要因人而异,但都必须操作。
抽象类
package com.designpattern.template;public abstract class AbstractTemplate {//模板方法public void playDVD(){//调用基本方法openPower();openTV();operateDVD();}//基本方法的声明(由子类实现)protected abstract void operateDVD();//基本方法(已经实现)private final void openPower(){System.err.println("打开总电源……");}protected void openTV(){System.err.println("使用遥控器打开TV开关……");}
}
具体类,实现了父类所声明的基本方法,abstract 方法所代表的就是强制子类实现的剩余逻辑
package com.designpattern.template;public class ConcreteTemplate extends AbstractTemplate{@Overrideprotected void operateDVD() {// TODO Auto-generated method stubSystem.err.println("\t操作DVD:直接打开dvd电源");System.err.println("\t操作DVD:使用遥控器打开光盘仓");System.err.println("\t操作DVD:放入光盘");System.err.println("\t操作DVD:直接关闭光盘仓");}}
package com.designpattern.template;public class TestMain {public static void main(String[] args) {ConcreteTemplate concreteTemplate = new ConcreteTemplate();concreteTemplate.playDVD();}
}
打开总电源……
使用遥控器打开TV开关……操作DVD:直接打开dvd电源操作DVD:使用遥控器打开光盘仓操作DVD:放入光盘操作DVD:直接关闭光盘仓
设计模式----模板方法模式相关推荐
- 在一个程序设计里,不同的功能窗口有着相似的功能实现方式,可采用设计模式---模板方法模式
前段时间学习了一些设计模式,最近在做项目的过程中恰巧用到了其中的一个--模板方法模式.这个模式在程序设计过程中可是为小编省去了不少的代码量呢.具体是怎样应用的呢?接下来小编为您分享. 前面博文 ...
- 『设计模式』瑞幸咖啡还是星巴克,一杯下午茶让我明白 设计模式--模板方法模式(Template Method Pattern)
23种设计模式+额外常用设计模式汇总 (持续更新) 简介 Define the skeleton of an algorithm in an operation,deferring some step ...
- 『设计模式』设计模式--模板方法模式
23种设计模式+额外常用设计模式汇总 (持续更新) 简介 Define the skeleton of an algorithm in an operation,deferring some step ...
- 行为型设计模式---模板方法模式
设计模式 序号 内容 链接地址 1 设计模式七大原则 https://blog.csdn.net/qq_39668819/article/details/115390615 2 创建型设计模式–工厂模 ...
- Java设计模式-模板方法模式详解
Java设计模式-模板方法模式 文章目录 Java设计模式-模板方法模式 0.前言 1.模板方法原理 2.模板方法模式中的角色 3.模板方法模式的UML类图 4.代码实现 5.编码测试 6.模板模式中 ...
- Java设计模式 - 模板方法模式
Java设计模式 - 模板方法模式 定义一个算法的骨架,并将一些步骤通过子类表达. UML图示 要点 1. 定义一个算法的骨架 - 建立一个抽象类 2. 将一些步骤通过子类表达 - 子类继承抽象类 赋 ...
- linkin大话设计模式--模板方法模式
linkin大话设计模式--模板方法模式 准备一个抽象类,将部分逻辑以具体方法的形式实现,然后申明一些抽象方法来迫使子类实现剩余的逻辑.不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不 ...
- JAVA 设计模式 模板方法模式
定义 模板方法模式 (Template Method) 定义了一个操作中的算法的骨架,而将部分步骤的实现在子类中完成. 模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 模 ...
- 模板设计模式_设计模式-模板方法模式
一.模板方法模式的定义 在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板.它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行.这种类型的设计 ...
- 大话设计模式—模板方法模式
在模板方法模式(TemplateMethod Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板.它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行.这种类型的设计模式属于 ...
最新文章
- python 归一化_几种归一化方法(Normalization Method)python实现
- 文件上传至服务器cpu,文件服务器构建指南
- 让你大脑变冷静的28句英文
- NgRx Store createSelector 的单步调试和源代码分析
- python构建二叉树_python--使用递归的方式建立二叉树
- 加油站都需要什么手续_农村买房过户都需要什么手续?
- 单页面响应式模板:黑石
- Interllij IDEA启动Jrebe因为中文路径失败
- 关于我在1024程序员节还在焊板子这件事儿
- Ubuntu 14.04 Ruby 2.3.3 安装
- python dbf转excel_如何在python中将dbf转换为csv?
- google(轻量级依赖注入框架)Guice学习 (四) guice与springboot简单协作、总结
- 美团:团购突围后走向何方?
- IDEA中单词拼写错误
- 高通烧录报ufs需要重新provision
- 小米校招 C++研发 相机部 一二面
- 谈到海外市场推广,别小觑蒲公英内测托管平台的国际短信服务
- 微信小程序跳转微信小程序,使用微信开发者工具的测试记录
- C++ 函数:accumulate()
- 小米4 第三方re奇兔_【PC】小米运动刷步数 微信 QQ 支付宝 蚂蚁森林每天296g能量...