1,设计模式的作用:让人们写出可复用和可维护性高的程序,代价可能是,额外增加代码量;

比较形象的例子:空房间里面放东西,如果日复一日的往里面扔东西,时间久了,很难找到自己想要的东西,调整也不容易,但是做一些柜子放东西,虽然前期增加了成本,但是在维护阶段带来了极大的好处。【柜子存放东西】,或许就是一种模式。

2,所有设计模式的实现遵循一条原则:找出程序中变化的地方,并将变化封装起来。程序中不变和稳定的部分是很容易复用,所以需要封装变化的部分。

初学者针对设计模式很容易出现“锤子理论”:当我们有一把锤子,看什么都是钉子。意思是:设计模式的深刻意图,只有结合实际项目场景灵活使用。

3,编程语言分类:静态类型,动态类型。

静态类型语言:在编译时候便已经确定变量的类型。动态类型语言:变量被赋值后,才具有某种类型。

静态语言和动态语言的优缺点:静态语言明确规定了数据类型,迫使程序员按照契约来写程序,辅助程序员编写可靠性高的代码,动态语言优点是编写代码量减少,更加简洁,但是无法保证变量类型,可能在运行过程中发生跟类型相关的错误。Javascript是一门典型的动态类型语言,动态类型语言对变量类型带来了很大的宽容性。

“鸭子类型”:如果它走起路来像鸭子,叫起来也是鸭子,那么它就是鸭子。通俗易懂的来讲:我们关注的是对象的行为,不关注对象本身。

(我觉着这本书写的好棒,下面还有个鸭子的故事程序)

var duck = {
duckSinging(){
console.log('嘎嘎嘎')
}
}
var chicken = {
duckSinging(){
console.log('嘎嘎嘎')
}
}
var choir = []; //合唱团
var joinChoir = function(animal){
if(animal && typeof animal.duckSinging === 'function'){
choir.push(animal);
console.log('恭喜加入合唱团');
console.log('合唱团已有成员数量:'+choir.length)
}
}
joinChoir(duck);
//恭喜加入合唱团
//合唱团已有成员数量:1
joinChoir(chicken);
//恭喜加入合唱团
//合唱团已有成员数量:2  

对于加入合唱团的动物,无论小狗,小鸡,小猫,只要拥有duckSinging的方法,就能够加入进来。在动态类型语言的面向对象方法中,“鸭子类型”概念至关重要。

利用“鸭子类型”思想,“面向接口编程,而不是面向实现编程”。面向接口编程,意思就是不是很关注实现,只关注接口API的输出,对象内部的变化对其他对象而言是透明的,也就是不可见的,透明的意思是:你不知道它是如何做到的,反正它就是能做到。

var makeSound = function(animal){
if(animal instanceof Duck){
console.log('嘎嘎嘎')
}else if(animal instanceof Chiken){
console.log('咯咯咯')
}
}
var Duck = function(){};
var Chiken = function(){};
makeSound(new Duck()); //嘎嘎嘎
makeSound(new Chiken()) //咯咯咯

上面的代码体现了“多态”,将“做什么”和“怎么做”分开,就是当我们对调用一些函数时,函数会返回不同的执行结果,这就是多态性的一种体现。

javascript设计模式和开发实践(阶段一)的更多相关文章

  1. 《JavaScript设计模式与开发实践》整理

    最近在研读一本书<JavaScript设计模式与开发实践>,进阶用的. 一.高阶函数 高阶函数是指至少满足下列条件之一的函数. 1. 函数可以作为参数被传递. 2. 函数可以作为返回值输出 ...

  2. JavaScript设计模式与开发实践 - 观察者模式

    概述 观察者模式又叫发布 - 订阅模式(Publish/Subscribe),它定义了一种一对多的关系,让多个观察者对象同时监听某一个目标对象(为了方便理解,以下将观察者对象叫做订阅者,将目标对象叫做 ...

  3. JavaScript设计模式与开发实践 - 策略模式

    引言 本文摘自<JavaScript设计模式与开发实践> 在现实中,很多时候也有多种途径到达同一个目的地.比如我们要去某个地方旅游,可以根据具体的实际情况来选择出行的线路. 如果没有时间但 ...

  4. JavaScript设计模式与开发实践 - 单例模式

    引言 本文摘自<JavaScript设计模式与开发实践> 在传统开发工程师眼里,单例就是保证一个类只有一个实例,实现的方法一般是先判断实例存在与否,如果存在直接返回,如果不存在就创建了再返 ...

  5. 《javascript设计模式与开发实践》--- (单一职责原则)

    看的这本书叫<JavaScript设计模式与开发实践> 先规划一下看书的顺序,基础知识我已经大概的浏览了一遍了,没有留下笔记,以后有时间还会补上.本来打算顺着看的.但是我感觉我很难短时间内 ...

  6. JavaScript设计模式与开发实践——读书笔记1.高阶函数(上)

    说来惭愧,4个多月未更新了.4月份以后就开始忙起来了,论文.毕设.毕业旅行等七七八八的事情占据了很多时间,毕业之后开始忙碌的工作,这期间一直想写博客,但是一直没能静下心写.这段时间在看<Java ...

  7. 《JavaScript设计模式与开发实践》读书笔记-基础知识

    笔记内容多摘录自<JavaScript设计模式与开发实践>(曾探著),侵删. 面向对象的JavaScript 1. 动态需要类型和鸭子类型 鸭子类型 如果它走起路来像鸭子,叫起来也是鸭子, ...

  8. 《Javascript设计模式与开发实践》--读书笔记

    第2章 this call apply bind()方法创建一个新的函数,在bind()被调用时,这个新函数的this被bind的第一个参数指定,其余的参数将作为新函数的参数供调用时使用. bind( ...

  9. JavaScript设计模式与开发实践——JavaScript的多态

    “多态”一词源于希腊文polymorphism,拆开来看是poly(复数)+ morph(形态)+ ism,从字面上我们可以理解为复数形态. 多态的实际含义是:同一操作作用于不同的对象上面,可以产生不 ...

随机推荐

  1. hdu1069 Monkey and Banana LIS

    #include<cstdio> #include<iostream> #include<algorithm> #include<queue> #inc ...

  2. django操作非ORM创建的表

    问题:django的ORM怎么连接已存在的表,然后进行增删查改操作?     工作中会遇见很多二次开发的时候,表都是已经创建好的,用django的ORM进行二次开发,怎么操作数据库中的表呢? 下面介绍 ...

  3. VB.Net制作-历朝通俗演义

    原先的回数,全是汉语数字,为此我先转换成了阿拉伯数字,遗憾的是阿拉伯数字100居然排在1和2之前!所以必须设置为3位数字才行!否则顺序是乱的. 以下是用VBA批量重命名的代码: Dim FSO As ...

  4. FFT(快速傅里叶变换) 模板

    洛谷 P3803 [模板]多项式乘法(FFT)传送门 存个板子,完全弄懂之后找机会再写个详解. #include<cstdio> #include<cmath> struct ...

  5. c socket 开发测试

    c语言异常 参照他人代码写一个tcp的 socket 开发测试 异常A,在mac osx系统下编译失败,缺库转到debian下. 异常B,include引用文件顺序不对,编译大遍异常 异常C,/usr ...

  6. <JZOJ5906>传送门

    emmm dpdpdp然鹅我考场上并想不到 还是凉凉 #include<cstdio> #include<cmath> #include<iostream> #in ...

  7. python爬虫练手项目快递单号查询

    import requests def main(): try: num = input('请输入快递单号:') url = 'http://www.kuaidi100.com/autonumber/ ...

  8. Hive Functions

    函数的分类 内置函数 操作符 复杂对象 UDF函数 数学函数 类型转换函数 日期函数 条件函数 UDTF函数 常用UDTF函数 explode posexplode inline stack json ...

  9. Gnu pgp加密解密

    在生成密钥的时候,无法生成足够多的随机数,提示“ Not enough random bytes available. Please do some other work to givethe OS ...

  10. -scp Linux之间复制文件和目录

    scp 简介 scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的.可能会稍微影响一下速 ...