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 相关文章推荐
浅谈jQuery异步对象(XMLHttpRequest)
Nov 17 Javascript
javascript实现选中复选框后相关输入框变灰不可用的方法
Aug 11 Javascript
IE6兼容透明背景图片及解决方案
Aug 19 Javascript
Jquery easyui 实现动态树
Nov 17 Javascript
JS+Canvas绘制时钟效果
Aug 20 Javascript
全面了解JavaScirpt 的垃圾(garbage collection)回收机制
Jul 11 Javascript
jQuery插件ajaxFileUpload异步上传文件
Oct 19 Javascript
react 父组件与子组件之间的值传递的方法
Sep 14 Javascript
删除table表格行的实例讲解
Sep 21 Javascript
Vue2.x中利用@font-size引入字体图标报错的解决方法
Sep 28 Javascript
JS/HTML5游戏常用算法之碰撞检测 地图格子算法实例详解
Dec 12 Javascript
vue + elementUI实现省市县三级联动的方法示例
Oct 29 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
PHP5.5安装PHPRedis扩展及连接测试方法
2017/01/22 PHP
ie和firefox中img对象区别的困惑
2006/12/27 Javascript
学习ExtJS Window常用方法
2009/10/07 Javascript
学习ExtJS accordion布局
2009/10/08 Javascript
在JavaScript并非所有的一切都是对象
2013/04/11 Javascript
下拉菜单点击实现连接跳转功能的js代码
2013/05/19 Javascript
jquery等宽输出文字插件使用介绍
2013/09/18 Javascript
动态加载脚本提升javascript性能
2014/02/24 Javascript
js获取域名的方法
2015/01/27 Javascript
javascript中slice(),splice(),split(),substring(),substr()使用方法
2015/03/13 Javascript
jquery自定义表格样式
2015/11/23 Javascript
只需五句话搞定JavaScript作用域(经典)
2016/07/26 Javascript
js 开发之autocomplete="off"在chrom中失效的解决办法
2017/09/28 Javascript
vue的状态管理模式vuex
2017/11/30 Javascript
详解vue-cli官方脚手架配置
2018/07/20 Javascript
AngularJS使用$http配置对象方式与服务端交互方法
2018/08/13 Javascript
如何解决vue2.0下IE浏览器白屏问题
2018/09/13 Javascript
微信小程序仿知乎实现评论留言功能
2018/11/28 Javascript
基于Element封装一个表格组件tableList的使用方法
2020/06/29 Javascript
如何利用 JS 脚本实现网页全自动秒杀抢购功能
2020/10/12 Javascript
详解node.js创建一个web服务器(Server)的详细步骤
2021/01/15 Javascript
Scrapy-redis爬虫分布式爬取的分析和实现
2017/02/07 Python
python处理数据,存进hive表的方法
2018/07/04 Python
Python数据报表之Excel操作模块用法分析
2019/03/11 Python
python 协程中的迭代器,生成器原理及应用实例详解
2019/10/28 Python
完美解决python针对hdfs上传和下载的问题
2020/06/05 Python
Python如何合并多个字典或映射
2020/07/24 Python
微软英国官方网站:Microsoft英国
2016/10/15 全球购物
欧洲最大的美妆零售网站:Feelunique
2017/01/14 全球购物
联谊活动策划书
2014/01/26 职场文书
大学迎新生标语
2014/10/06 职场文书
2014年物流工作总结
2014/11/25 职场文书
初中生毕业评语
2014/12/29 职场文书
单位接收函范文
2015/01/30 职场文书
Python实现制作销售数据可视化看板详解
2021/11/27 Python
PHP正则表达式之RCEService回溯
2022/04/11 PHP