模板方法模式说明

定义:定义方法操作的骨架,把一些具体实现延伸到子类中去,使用得具体实现不会影响到骨架的行为步骤!

说明:模式方法模式是一个继承跟复用的典型模式,该模式定义了一个抽象类,Abstract Class,其下定义了一个或多个模板方法,也就是顶级方法,这些方法定义行为的调度步骤,一般是调用抽象中定义的其他具体类或勾子;定义了一些抽象方法,这些方法必须要由具体子类来实现;还有可能定义了一些勾子方法,这一般是空方法,用于子类扩展。

模板方法模式组成:

1>. 模板方法: 也叫骨架方法,定义行为调度步骤! 不能被子类修改,如果在java高级面向对象语言,一般会以 final 修饰!

2>. 抽象方法:待子类继承必须实现的方法;

3>. 具体方法:用于在抽象类中的顶级实现,一般也不能被覆盖修改,一般也会加上 final 修饰!

4>. 勾子方法: 一般为空方法. 方法命名一般以 “do” 开头,类似于 HttpServlet 下的 doGet, doPost;

模板方法模式,一般用于 具有相同行为逻辑过程,但各自实现不太一样的场景,这种情况就可以采用这种模式,定义骨架,规定如何去执行,顺序、调度等,再让子类各自去实具体的行为;

面向对象思想,要注意它不变跟变化的因素,在模板方法模式里,行业逻辑是不变的,行为具体实现是可变的,把可变跟不可变的分离使之解藕,这符合面向对象的开闭原则;定义抽象骨架,让具体实现以子类形式去自由扩展,互不影响。

模板模式结构图:

实例场景:

1>. 比如不同文件审批上呈过程,经过的人或部门是一样的,但每个过程他的处理是不一致的;

2>. 再比如说,大学四年,不同专业每年所修的课本是不太一样的;

实例源码

这里以读大学四年来实现;

1. 定义抽象类;

function AbstractClass() {

}

AbstractClass.prototype.template = function() {
this.FirstYear();
this.SecondYear();
this.ThirdYear();
this.FourthYear();
} AbstractClass.prototype.FirstYear = function() {
console.log('需要重写');
} AbstractClass.prototype.SecondYear = function() {
console.log('需要重写');
} AbstractClass.prototype.ThirdYear = function() {
console.log('需要重写');
} AbstractClass.prototype.FourthYear = function() {
console.log('需要重写');
}

2. 定义某学生;

function Student(name) {
this.name = name;
} Student.prototype = AbstractClass.prototype; //继承 Student.prototype.FirstYear = function() {
console.log(this.name+' 第一年修: 语文' );
} Student.prototype.SecondYear = function() {
console.log(this.name+' 第二年修: 数学' );
} Student.prototype.ThirdYear = function() {
console.log(this.name+' 第三年修: 英语' );
} Student.prototype.FourthYear = function() {
console.log(this.name+' 第四年修: 历史' );
}

3. 使用方法:

var student = new Student('陈某某');
student.template();

输出:

陈某某 第一年修: 语文

陈某某 第二年修: 数学

陈某某 第三年修: 英语

陈某某 第四年修: 历史

其他说明

面向对象中的继承,一般把行为方法置于最顶层,把状态成员,置于子类当中;关注行为,而非状态;

模板方法模式是一个经常用到的模式,体现了面向对象经典的继承跟复用特点;用于关注固定的逻辑行为,骨架方法用于封装固定的逻辑过程,开发时要提取这部分统一的过程到抽象类中去,抽象与具体的设计师分工开发时就可以不受其他影响;

关健字:模板,继承,骨架;

[设计模式] javascript 之 模板方法模式的更多相关文章

  1. 设计模式 ( 十九 ) 模板方法模式Template method(类行为型)

      设计模式 ( 十九 ) 模板方法模式Template method(类行为型) 1.概述 在面向对象开发过程中,通常我们会遇到这样的一个问题:我们知道一个算法所需的关键步骤,并确定了这些步骤的执行 ...

  2. c#设计模式系列:模板方法模式(Template Method Pattern)

    引言 提到模板,大家肯定不免想到生活中的"简历模板"."论文模板"."Word中模版文件"等,在现实生活中,模板的概念就是--有一个规定的格 ...

  3. C#设计模式系列:模板方法模式(Template Method)

    你去银行取款的时候,银行会给你一张取款单,这张取款单就是一个模板,它把公共的内容提取到模板中,只留下部分让用户来填写.在软件系统中,将多个类的共有内容提取到一个模板中的思想便是模板方法模式的思想. 模 ...

  4. Java设计模式学习记录-模板方法模式

    前言 模板方法模式,定义一个操作中算法的骨架,而将一些步骤延迟到子类中.使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤. 模板方法模式 概念介绍 模板方法模式,其实是很好理解的,具体 ...

  5. C#设计模式之十三模板方法模式(Template Method Pattern)【行为型】

    一.引言 “结构型”的设计模式已经写完了,从今天我们开始讲“行为型”设计模式.现在我们开始讲[行为型]设计模式的第一个模式,该模式是[模板方法],英文名称是:Template Method Patte ...

  6. 设计模式之七:模板方法模式(Template Method)

    模板方法模式: 定义了一个算法的基本操作骨架,并将算法的一些步骤延迟到子类中来实现. 模板方法模式让子类在不更改算法结构的前提下能够又一次定义算法的一些步骤. Define the skeleton ...

  7. 《Java设计模式》之模板方法模式

    模板方法模式是类的行为模式.准备一个抽象类.将部分逻辑以详细方法以及详细构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑.不同的子类能够以不同的方式实现这些抽象方法,从而对剩余的逻辑有 ...

  8. 设计模式之禅——模板方法模式&钩子方法

    ** **板方法模式的定义: 定义一个操作的算法的框架,而将一些步骤延迟到子类中.使得子类可以不改变一个算法的框架即可重定义该算法的某些特定步骤. 例子:做一个简单的悍马车的模型 见UML图 一个抽象 ...

  9. 大话设计模式Python实现-模板方法模式

    模板方法模式(Template Method Pattern):定义一个操作中的算法骨架,将一些步骤延迟至子类中.模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤. 下面是一个模 ...

随机推荐

  1. Redis未授权访问漏洞分析

    catalog . Redis简介 . 漏洞概述 . 漏洞利用方式 . 修复方式 1. Redis简介 Relevant Link: http://www.cnblogs.com/LittleHann ...

  2. dedecms /plus/search.php SQL Injection && Local Variable Overriding

    catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 这个文件有两处注入漏洞 . $typeid变量覆盖导致ChannelTy ...

  3. iptables实现反向代理

    拓扑图 实现目标 公网用户通过Firewall服务器(iptables实现)访问内网http服务 配置 #iptables iptables -t nat -A PREROUTING -p tcp - ...

  4. Spring Cache 介绍

    Spring Cache 缓存是实际工作中非常常用的一种提高性能的方法, 我们会在许多场景下来使用缓存. 本文通过一个简单的例子进行展开,通过对比我们原来的自定义缓存和 spring 的基于注释的 c ...

  5. JSP+JavaBean+Servlet实现各类列表分页功能

    需求: 每页列表下都有一个分页的功能,显示总数量.当前页/总页数.首页.上一页.下一页.最后一页.GO到第几页 效果动态图: 实现思路: 因为每个列表页都需要,在每个出列表页数据的servlet中都要 ...

  6. 【Alpha版本】 第九天 11.17

    一.站立式会议照片: 二.项目燃尽图: 三.项目进展: 成 员 昨天完成任务 今天完成任务 明天要做任务 问题困难 心得体会 胡泽善 完成我要应聘的详情显示,解决头像不能显示的问题,完成了报名及取消操 ...

  7. C#保存图片设置图片质量的方法

    主要用到System.Drawing.Imaging命名空间下的ImageCodecInfo.Encoder.EncoderParameter.EncoderParameters四个类 实现代码 代码 ...

  8. 数据结构与算法分析–Minimum Spanning Tree(最小生成树)

    给定一个无向图,如果他的某个子图中,任意两个顶点都能互相连通并且是一棵树,那么这棵树就叫做生成树(spanning tree). 如果边上有权值,那么使得边权和最小的生成树叫做最小生成树(MST,Mi ...

  9. python模块app登陆认证(M2Crypto数字证书加密)

    需求: 1.通过数字证书,非对称加密方式传送对称秘钥给服务端 2.用户名.密码使用对称秘钥加密,发送服务端验证 3.传送数据使用字节流方式 实现思路: 1.了解python的struct模块,用于字节 ...

  10. java编程思想-java中的并发(四)

    五. 新类库中的构件 Java SE5的java.util.concurrent引入了大量设计用来解决并发问题的新类.学习使用它们将有助于编写出更加简单而强壮的并发程序. 1. CountDownLa ...