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查找某元素中的所有图片地址的方法
Jan 16 Javascript
javascript类型系统 Window对象学习笔记
Jan 07 Javascript
js addDqmForPP给标签内属性值加上双引号的函数
Dec 24 Javascript
js获取当前周、上一周、下一周日期
Mar 19 Javascript
在vue-cli中组件通信的方法
Dec 16 Javascript
Vue绑定内联样式问题
Oct 17 Javascript
vue移动端html5页面根据屏幕适配的四种解决方法
Oct 19 Javascript
微信小程序基于picker实现级联菜单
Feb 15 Javascript
详解jQuery中的getAll()和cleanData()
Apr 15 jQuery
详解vue-template-admin三级路由无法缓存的解决方案
Mar 10 Javascript
js实现直播点击飘心效果
Aug 19 Javascript
vue实现简单计算商品价格
Sep 14 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
在Mac OS上自行编译安装Apache服务器和PHP解释器
2015/12/24 PHP
Mac下关于PHP环境和扩展的安装详解
2019/10/17 PHP
JS 建立对象的方法
2007/04/21 Javascript
用js实现的抽象CSS圆角效果!!
2007/05/03 Javascript
Jquery判断radio、selelct、checkbox是否选中及获取选中值方法总结
2015/04/15 Javascript
jquery插件bxslider用法实例分析
2015/04/16 Javascript
JavaScript中setUTCMilliseconds()方法的使用详解
2015/06/12 Javascript
基于JavaScript的操作系统你听说过吗?
2016/01/28 Javascript
深入解析JavaScript框架Backbone.js中的事件机制
2016/02/14 Javascript
浅谈js的异步执行
2016/10/18 Javascript
利用iscroll4实现轮播图效果实例代码
2017/01/11 Javascript
浅析vue component 组件使用
2017/03/06 Javascript
如何让你的JS代码更好看易读
2017/12/01 Javascript
jQuery实现滚动到底部时自动加载更多的方法示例
2018/02/18 jQuery
layui 优化button按钮和弹出框的方法
2018/08/15 Javascript
JS通过ajax + 多列布局 + 自动加载实现瀑布流效果
2019/05/30 Javascript
微信小程序实现商城倒计时
2020/11/01 Javascript
vue项目部署到nginx/tomcat服务器的实现
2019/08/26 Javascript
js+canvas实现两张图片合并成一张图片的方法
2019/11/01 Javascript
借助云开发实现小程序短信验证码的发送
2020/01/06 Javascript
一行JavaScript代码如何实现瀑布流布局
2020/12/11 Javascript
python清除字符串里非字母字符的方法
2015/07/02 Python
实现python版本的按任意键继续/退出
2016/09/26 Python
Python3实现的字典、列表和json对象互转功能示例
2018/05/22 Python
学生信息管理系统python版
2018/10/17 Python
python、Matlab求定积分的实现
2019/11/20 Python
pytorch实现seq2seq时对loss进行mask的方式
2020/02/18 Python
python实现从尾到头打印单链表操作示例
2020/02/22 Python
python 如何实现遗传算法
2020/09/22 Python
Mankind西班牙男士护肤品网站:购买皮肤护理、护发和剃须
2017/04/27 全球购物
Tirendo比利时:在线购买轮胎
2018/10/22 全球购物
校三好学生主要事迹
2014/01/11 职场文书
网络优化专员求职信
2014/05/04 职场文书
2014年端午节演讲稿范文
2014/05/23 职场文书
城管个人总结
2015/02/28 职场文书
党员读书活动心得体会
2016/01/14 职场文书