javascript设计模式 ? 模板方法模式原理与用法实例分析


Posted in Javascript onApril 23, 2020

本文实例讲述了javascript设计模式 ? 模板方法模式原理与用法。分享给大家供大家参考,具体如下:

介绍:模板方法模式是结构最简单的行为型设计模式,在其结构中只存在父类与子类之间的继承关系。使用模板方法模式,可以将一些复杂流程的实现步骤封装在一系列基本方法中。

定义:定义一个操作中算法的框架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。模板方法是一种类行为型模式。

场景:我们设计一个游戏机,用来运行不同的游戏,

示例:

var Game = function(){
  this.play = function(){
    this.initialize();
    this.startPlay();
    this.endPlay();
    this.uninstall();
  }
  this.uninstall = function(){
    console.log('uninstall Game')
  }
}
 
var CrossFire = function(){
  this.initialize = function(){
    console.log('CrossFire initialize')
  }
  this.startPlay = function(){
    console.log('CrossFire startPlay')
  }
  this.endPlay = function(){
    console.log('CrossFire endPlay')
  }
}
CrossFire.prototype = new Game();
 
var LeagueofLegends = function(){
  this.initialize = function(){
    console.log('LeagueofLegends initialize')
  }
  this.startPlay = function(){
    console.log('LeagueofLegends startPlay')
  }
  this.endPlay = function(){
    console.log('LeagueofLegends endPlay')
  }
}
LeagueofLegends.prototype = new Game();
 
 
var cf = new CrossFire();
cf.play();
// CrossFire initialize
// CrossFire startPlay
// CrossFire endPlay
// uninstall Game
var lol = new LeagueofLegends();
lol.play();
// LeagueofLegends initialize
// LeagueofLegends startPlay
// LeagueofLegends endPlay
// uninstall Game

在这个例子里,Game称为抽象类,抽象类内部定义了一个模板方法play,play的内部定义了算法的架构,算法的执行顺序,只有子类将步骤补齐后才能执行模板方法。
LeagueofLegends,CrossFire这两个类称为子类,继承自Game,他们的任务是实现模板方法中的步骤。
initialize,startPlay,endPlay,uninstall称为基本方法,用来具体实现每个步骤

模板方法模式总结:

优点:
* 模板方法模式是一种代码复用技术,将公共行为放在父类中,而通过其子类来实现不同的行为,他鼓励恰当使用继承来实现代码复用。
* 模板方法可以实现一种反向控制结构,通过子类覆盖父类的方法来决定某一步骤是否执行。

缺点:
* 需要为每一个基本方法的不同实现提供一个子类,如果父类中可变的基本方法太多,将会导致类的个数增加,系统更加庞大。

适用场景:
* 对一些复杂的算法进行分割,将其中固定不变的布冯设计为模板方法和父类基本方法,改变的细节由子类实现。
* 各子类的公共行为应当被提取出来并集中带一个父类中,利于代码复用。
* 需要子类决定父类的某个步骤是否执行,实现子类对父类的反向控制。

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码运行效果。

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
JS判断当前日期是否大于某个日期的实现代码
Sep 02 Javascript
document.getElementBy("id")与$("#id")有什么区别
Sep 22 Javascript
jQuery中element选择器用法实例
Dec 29 Javascript
jQuery如何跳转到另一个网页 就这么简单
Dec 28 Javascript
Extjs让combobox写起来简洁又漂亮
Jan 05 Javascript
JS正则匹配URL网址的方法(可匹配www,http开头的一切网址)
Jan 06 Javascript
Bootstrap 3 按钮标签实例代码
Feb 21 Javascript
微信小程序实现城市列表选择
Jun 05 Javascript
vue 双向数据绑定的实现学习之监听器的实现方法
Nov 30 Javascript
layui use 定义js外部引用函数的方法
Sep 26 Javascript
微信小程序自定义支持图片的弹窗
Dec 21 Javascript
使用javascript解析二维码的三种方式
Nov 11 Javascript
谈谈我在vue-cli3中用预渲染遇到的坑
Apr 22 #Javascript
如何修改Vue打包后文件的接口地址配置的方法
Apr 22 #Javascript
nuxt+axios实现打包后动态修改请求地址的方法
Apr 22 #Javascript
JS脚本实现定时到网站上签到/签退功能
Apr 22 #Javascript
微信小程序实现手指拖动选项排序
Apr 22 #Javascript
javascript设计模式 ? 观察者模式原理与用法实例分析
Apr 22 #Javascript
javascript设计模式 ? 状态模式原理与用法实例分析
Apr 22 #Javascript
You might like
ThinkPHP之foreach标签使用概述
2014/06/30 PHP
CentOS系统中PHP安装扩展的方式汇总
2017/04/09 PHP
thinkphp5 migrate数据库迁移工具
2018/02/20 PHP
用JavaScript获取网页中的js、css、Flash等文件
2006/12/20 Javascript
Display SQL Server Login Mode
2007/06/21 Javascript
js下关于onmouseout、事件冒泡的问题经验小结
2010/12/09 Javascript
JavaScript异步调用定时方法并停止该方法实现代码
2012/03/16 Javascript
jQuery-onload让第一次页面加载时图片是淡入方式显示
2012/05/23 Javascript
如何让页面加载完成后执行js
2013/06/26 Javascript
JS下拉框内容左右移动效果的具体实现
2013/07/10 Javascript
JavaScript字符串插入、删除、替换函数使用示例
2013/07/25 Javascript
jquery实现LED广告牌旋转系统图片切换效果代码分享
2015/08/26 Javascript
Vue.js组件通信的几种姿势
2017/10/23 Javascript
vue.js todolist实现代码
2017/10/29 Javascript
使用veloticy-ui生成文字动画效果
2018/02/08 Javascript
JS实现倒计时图文效果
2018/11/17 Javascript
[04:05]TI9战队采访 - Natus Vincere
2019/08/22 DOTA
[01:11:28]DOTA2-DPC中国联赛定级赛 RNG vs Phoenix BO3第一场 1月8日
2021/03/11 DOTA
python中的lambda表达式用法详解
2016/06/22 Python
Python的mysql数据库的更新如何实现
2017/07/31 Python
python中reload(module)的用法示例详解
2017/09/15 Python
Python选择网卡发包及接收数据包
2019/04/04 Python
浅谈PySpark SQL 相关知识介绍
2019/06/14 Python
Python 分享10个PyCharm技巧
2019/07/13 Python
Pandas+Matplotlib 箱式图异常值分析示例
2019/12/09 Python
python开发实例之Python的Twisted框架中Deferred对象的详细用法与实例
2020/03/19 Python
python字符串的index和find的区别详解
2020/06/20 Python
教师考核评语
2014/04/28 职场文书
班风口号
2014/06/18 职场文书
个人委托书范本汇总
2014/10/01 职场文书
入党函调证明材料
2014/12/24 职场文书
2014年底个人工作总结
2015/03/10 职场文书
北京青年观后感
2015/06/15 职场文书
跳高加油稿
2015/07/21 职场文书
2015年市场营销工作总结
2015/07/23 职场文书
日本读研:怎样写好一篇日本研究计划书?
2019/07/15 职场文书