Template Method 模板方法 MD
| Markdown版本笔记 | 我的GitHub首页 | 我的博客 | 我的微信 | 我的邮箱 |
|---|---|---|---|---|
| MyAndroidBlogs | baiqiantao | baiqiantao | bqt20094 | baiqiantao@sina.com |
Template Method 模板方法 设计模式
目录
简介
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。
模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤的细节
抽象模板类的方法分为两类:
- 基本方法(
primitive method):由子类实现的方法,并且在模板方法被调用,客户端不关心这些基本方法,所以可以声明成 protected abstract - 模板方法(
template method):可以有多个, 一般是具体方法,也就是骨架,实现对基本方法的调度,完成固定的逻辑。一般声明为final以防止被覆写
模板方法模式需要开发抽象类和具体子类的程序员之间的协作。一个程序员负责给出一个算法的轮廓和骨架,另一些程序员则负责给出这个算法的各个逻辑步骤。
代表这些具体逻辑步骤的方法称做基本方法,而将这些基本方法汇总起来的方法叫做模板方法,这个设计模式的名字就是从此而来的。
优点
- 模板方法模式通过把
不变的行为搬移到超类,去除了子类中的重复代码。 - 子类实现算法的某些细节,有助于算法的扩展。
- 通过一个父类调用子类实现的操作,通过子类扩展增加新的行为,符合“开闭原则”。
适用场景:让子类可以重写方法的一部分,而不是整个重写,你可以控制子类需要重写那些操作。
模板方法模式
抽象模板
public abstract class Template {
//【基本方法】:由子类实现,并且在模板方法中被调用的方法;客户端不关心这些基本方法,所以可以声明成 protected abstract
protected abstract void printName();
protected abstract void printAge();
protected void printDate() {
System.out.println(new SimpleDateFormat("yyyy.MM.dd HH-mm-ss").format(new Date()));
}
//【模板方法】:可以有多个, 一般是具体方法,也就是骨架,实现对基本方法的调度,完成固定的逻辑;一般声明为final以防止被覆写
public final void print() {
printName();
printAge();
printDate();
}
}
具体模板
public class TemplateConcrete extends Template {
@Override
protected void printName() {
System.out.println("包青天");
}
@Override
protected void printAge() {
System.out.println(27);
}
}
客户端使用演示
public class Test {
public static void main(String[] args) {
Template temp = new TemplateConcrete();
temp.print();
}
}
public abstract class Template {
//【基本方法】:由子类实现,并且在模板方法中被调用的方法;客户端不关心这些基本方法,所以可以声明成 protected abstract
protected abstract void printName();
protected abstract void printAge();
protected void printDate() {
System.out.println(new SimpleDateFormat("yyyy.MM.dd HH-mm-ss").format(new Date()));
}
//【模板方法】:可以有多个, 一般是具体方法,也就是骨架,实现对基本方法的调度,完成固定的逻辑;一般声明为final以防止被覆写
public final void print() {
printName();
printAge();
printDate();
}
}
public class TemplateConcrete extends Template {
@Override
protected void printName() {
System.out.println("包青天");
}
@Override
protected void printAge() {
System.out.println(27);
}
}
public class Test {
public static void main(String[] args) {
Template temp = new TemplateConcrete();
temp.print();
}
}
2018-2-22
Template Method 模板方法 MD的更多相关文章
- Template Method 模板方法
简介 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中. 模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤的细节 抽象模板AbstractClass的方法分为两类: 基本 ...
- 设计模式13:Template Method 模板方法模式(行为型模式)
Template Method 模板方法模式(行为型模式) 变与不变 变化——是软件永恒的主题,如何管理变化带来的复杂性?设计模式的艺术性和复杂度就在于如何分析,并发现体系中的变化点和稳定点,并使用特 ...
- 设计模式 : Template method 模板方法模式 -- 行为型
设计模式中,模板模式面向的是方法级别的流程.(不过好像世界上大部分问题,都可以抽象点.抽象点吧,最后抽象到一个方法里面吧.) 1. 一个方法,可以用来描述一个流程,这个流程涉及多个环节,不同环节可 ...
- 设计模式(22)--Template Method(模板方法模式)--行为型
作者QQ:1095737364 QQ群:123300273 欢迎加入! 1.模式定义: 模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声 ...
- Template Method - 模板方法模式
1.概述 在面向对象开发过程中,通常我们会遇到这样的一个问题:我们知道一个算法所需的关键步骤,并确定了这些步骤的执行顺序.但是某些步骤的具体实现是未知的,或者说某些步骤的实现与具体的环境相关.例子1: ...
- 3、Template Method 模板方法 行为型设计模式
1.了解模板方法 1.1 模式定义 定义一个操作算法中的框架,而将这些步骤延迟加载到子类中. 它的本质就是固定算法框架. 1.2 解决何种问题 让父类控制子类方法的调用顺序 模板方法模式使得子类可以不 ...
- 设计模式C++学习笔记之九(Template Method模板方法模式)
模板模式也是相当简单的一种模式,而且是比较常用的.模板模式是定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些 ...
- 设计模式学习笔记——Template Method模板方法模式
可能是最简单的设计模式. 而且你我都用过而不自知. 因为,模板方法模式也者,就是面向对象中的继承.公用部分放在父类,子类继承父类,然后扩展.呵呵.
- 封装算法: 模板方法(Template Method)模式
template method(模板方法)模式是一种行为型设计模式.它在一个方法中定义了算法的骨架(这种方法被称为template method.模板方法),并将算法的详细步骤放到子类中去实现.tem ...
随机推荐
- 磁盘清理-安全转移C盘中软件的缓存文件
C盘飘红啦~~~ 安装软件时,默认会安装到C盘,并不会特意去改(尤其C盘是固态硬盘时).或者,根本就没有给你修改的机会. 可是啊,有些软件的缓存数据目录会比较大,实在太占C盘空间.想移出去,但又不想重 ...
- 使用DNSPod域名解析
1 在GoDaddy域名注册商 注册域名 https://sg.godaddy.com/zh/ 2 登陆DNSPod https://www.dnspod.cn 3 选择域名解析 添加域名 4 添加记 ...
- Android ListView 自动加载更多
Android ListView下拉刷新 ListView是我们经常用来展示数据的一个控件,但是由于我们手机的性能和流量的问题,往往我们从服务器中取数据,不能一次性将数据取出来,比如一个新闻的手机AP ...
- 机器学习之路: python k近邻分类器 KNeighborsClassifier 鸢尾花分类预测
使用python语言 学习k近邻分类器的api 欢迎来到我的git查看源代码: https://github.com/linyi0604/MachineLearning from sklearn.da ...
- QT学习笔记6:常见的 QGraphicsItem
简述 QGraphicsItem 类是 QGraphicsScene 中所有 item 的基类. 它提供了一个轻量级的基础,用于编写自定义 item.其中包括:定义 item 的几何形状.碰撞检测.绘 ...
- POJ 2987 Firing 网络流 最大权闭合图
http://poj.org/problem?id=2987 https://blog.csdn.net/u014686462/article/details/48533253 给一个闭合图,要求输出 ...
- ant design Modal遮罩层颜色加深 解决方案
1.原因 页面中存在多个Modal同时渲染及弹出(在table里使用Modal就会出现这种问题) 2.解决方案 不让多个Modal同时渲染就行了,设置Modal的visible属性为this.stat ...
- jquery获取单选button选中的值
在页面上单选button的代码: <s:iterator value="@com.hljw.cmeav.util.CmeavGlobal@isComMap"> < ...
- 2013-8-6 10:56:07 JAVA_WEB:员工号自动生成源代码
create table user_info_temp ( usId varchar2(20), usNo varchar2(20), usName varchar ...
- 点赞和吐糟Adblock Plus~进阶教程
前言:Adblock Plus后文都简称ABP,这是一篇ABP进阶教程!用ABP实现flashBlock和NoScript.推荐有相当基础的阅读.刚開始学习的人先看懂这里:http://adblock ...