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

所属分类: 网络编程 / JavaScript 阅读数: 1717
收藏 0 赞 0 分享

本文实例讲述了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.jb51.net/code/HtmlJsRun测试上述代码运行效果。

更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结

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

更多精彩内容其他人还在看

MUI 上拉刷新/下拉加载功能实例代码

这篇文章主要介绍了MUI 上拉刷新/下拉加载功能实例代码,包括一些个人心得,非常不错,具有参考借鉴价值,需要的的朋友参考下吧
收藏 0 赞 0 分享

解析NodeJS异步I/O的实现

本篇文章主要介绍了解析NodeJS异步I/O的实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

MUI  Scroll插件的使用详解

这篇文章主要介绍了MUI Scroll插件的使用详解,需要的朋友可以参考下
收藏 0 赞 0 分享

MUI 解决动态列表页图片懒加载再次加载不成功的bug问题

这篇文章主要介绍了MUI 解决动态列表页图片懒加载再次加载不成功的bug问题,解决方法很简单的,需要的朋友可以参考下
收藏 0 赞 0 分享

JS实现针对给定时间的倒计时功能示例

这篇文章主要介绍了JS实现针对给定时间的倒计时功能,结合具体实例形式分析了javascript日期时间的正则判定与动态运算相关操作技巧,需要的朋友可以参考下
收藏 0 赞 0 分享

javascript数组去重常用方法实例分析

这篇文章主要介绍了javascript数组去重常用方法,结合实例形式对比分析了几种常用的数组去重方法实现技巧与优缺点,需要的朋友可以参考下
收藏 0 赞 0 分享

Node.js Mongodb 密码特殊字符 @的解决方法

在去年的 DB 勒索事件之后, 不少的同学开始加强 Mongodb 的安全性, 其中一种办法就是设置复杂的密码. 那么如果设置的密码里包含一些如 “@”, “:” 一样的特殊字符,怎么处理呢?下面小编给大家带来了Node.js Mongodb 密码特殊字符 @的解决方法,一起学习
收藏 0 赞 0 分享

JS获取鼠标位置距浏览器窗口距离的方法示例

这篇文章主要介绍了JS获取鼠标位置距浏览器窗口距离的方法,结合实例形式分析了JS针对各种常见浏览器窗口及鼠标响应操作相关技巧,需要的朋友可以参考下
收藏 0 赞 0 分享

vue实现todolist单页面应用

这篇文章主要为大家详细介绍了vue实现todolist单页面应用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

基于vuejs实现一个todolist项目

这篇文章主要为大家详细介绍了基于vuejs实现一个todolist项目,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享
查看更多