蛀牙--《设计模式---通往未来的很高的台阶之(一)》
来源:互联网 发布:js addeventlistener 编辑:程序博客网 时间:2024/04/28 08:55
一、设计模式的作用
为神魔要学习设计模式呢,简单的说当系统存在很多相似的对象,可以用亨元模式来优化,了解设计模式可以让你在遇到经常出现的问题时能够通过一种通用的
解决方案来解决这个问题。我们可以把这种解决方案整理成一种模式。
二、设计模式的适用性
有人认为设计模式没用,为神魔累,有时我们遇到问题时,应用设计模式可能会增加复杂度,带来额外的代码量。可是这并不是设计模式出现的本质,设计模式出现是为了让开发者写出可复用性和可维护性的高质量的程序。喜欢整理知识的人总比扎头乱学的人了解的知识层次要好,这也就是设计模式的本质吧,所有设计模式都是找出程序的变化的地方,并把这些变化封装起来。剩下的就是稳定不变的东西,易于复用。
三、废话不多说,直接上干货
前期准备:
1、首先说说静态语言和动态语言
静态语言就是在编译的时候就确定了数据类型,动态语言在编译的时候没有确定数据类型,要等到程序循行的时候,待变量被赋值后才会有某种类型
静态语言和动态语言都有相应的优缺点,这里不做具体介绍,想了解的伙伴们可自行上网查阅,电脑就在你眼前,就差动手。
2、《js设计模式与开发实践》一书中提到鸭子类型,这里介绍一下:
故事开始了:就是一个国王喜欢听鸭子叫,要组建1000个鸭子的合唱团,但是就999只,但是发现一只鸡叫声和鸭子一样,就让鸡成为了合唱团的一员、
不要看字,关键是鸡------------------------------------------------------------------------------------------------
var duck = { duckSinging:function(){ console.log("嘎嘎嘎嘎嘎嘎") }};var chicken = { duckSinging:function(){ console.log("嘎嘎嘎嘎嘎嘎") }};定义了鸭子和鸡,并且都有duckSinging方法,因为他们多会嘎嘎嘎嘎嘎的叫
var choir = [] //合唱团var joinChoir = function(animal){ if(animal && typeof animal.duckSinging ==='function'){ choir.push(animal); console.log("恭喜加入合唱团"); }}joinChoir(duck); joinChoir(chicken);以上代码 打印两条 恭喜加入合唱团
因为我们要的是声音,我并不在乎他是什么动物,如果是一只大象,也会鸭子叫,那么他也可以加图合唱团,只是占得地方大了些,我说的是体积、不是代码
在动态语言的面向对象的设计中,鸭子类型的概念至关重要,有了鸭子类型,我们就不必借助超类型的帮助,轻松地在动态语言中实现一个原则,“”面向接口编程,而不是面向实现编程“”。
面向接口编程 是设计模式中最重要的思想。
3、多态
先上概念。同一操作作用于不同的对象上面,可以产生不同的解释和不同的执行结果。
我养了一个狗一个猫 我说叫 狗叫 旺旺 猫叫 喵喵 。。。。。这就是堕胎的思想(多态)
var makeSound = function(animal){ if(animal instanceof Cat){ console.log("喵喵") } else if(animal instanceof Dog){ console.log("旺旺") }}var Dog = function(){}var Cat = function(){}makeSound(new Dog()); //旺旺makeSound(new Cat()); //喵喵
关于typeof 和instanceof的区别 在 在这里 有着详细的介绍 需要知道=====================================
这里就要用到设计模式的核心了 请注意 前方
var maskSound = function( animal ){ aniaml.sound();} var Dog = function(){}Dog.prototype.sound = function(){ console.log("旺旺")}var Cat = function(){}Cat.prototype.sound = function(){ console.log("喵喵")}msakSound( new Dog() ); //旺旺maskSound( new Cat() ); //喵喵
我们将每个动物的叫 这个行为封装到 他们的圆形对象中 因为动物的叫 是可变的
但是人的命令 是不变的 当我们在想 加入 老鼠叫 只需要在后续的代码中加入老鼠即可
未完待续===========-----------------------
参考书籍《JavaScript设计模式与开发实践》
人之所以弱小,是因为还有缺陷 ———— 《蛀牙》
- 蛀牙--《设计模式---通往未来的很高的台阶之(一)》
- 蛀牙--《设计模式---通往未来的很高的台阶之(二)》
- 蛀牙--《设计模式---通往未来的很高的台阶之(三)》
- 蛀牙--《设计模式---通往未来的很高的台阶之(四)》
- 蛀牙--《设计模式---通往未来的很高的台阶之(五)》
- 蛀牙--《设计模式---通往未来的很高的台阶之(六)》
- 通往幸福的九级台阶
- 翻译:通往WinDbg的捷径(一)
- 通往WinDbg的捷径(一)
- 翻译:通往WinDbg的捷径(一)
- 通往WinDbg的捷径(一)
- 通往WinDbg的捷径(一)
- 通往WinDbg的捷径(一)
- 通往WinDbg的捷径(一)
- 翻译:通往WinDbg的捷径(一)
- 通往WinDbg的捷径(一)
- 通往WinDbg的捷径(一)
- [软件人生]苦难与蜕变——心性修炼是通往高手之路的第一个台阶[ZT]
- 限制input输入类型(多种方式实现)
- DSP28335—程序从flash复制到ram里的两种情况:部分复制和全部复制
- BZOJ 1433 假期的宿舍 (图论 二分图匹配 匈牙利算法)
- 6月7日,每日20行。
- HTML用JS导出Excel的五种方法
- 蛀牙--《设计模式---通往未来的很高的台阶之(一)》
- Linux下安装SVN服务(CentOS7下)
- 利用js实现checkbox的单选功能
- 值得推荐的C/C++框架和库
- static{}语句块详解
- jsp页面中的遍历数据
- qt中限制QLineEdit的输入范围
- ***缺页异常详解***
- C#.NET MVC 枚举转dictionary