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. 3)ARP到底属于网络层还是链路层

     说白了  就是有些协议起到了承上启下的作用  比较模糊   很难给出一个精确的定位

  2. 吴裕雄--天生自然python学习笔记:人脸识别用到的特征文件haarcascade_frontalface_default.xml下载

    下载地址:https://github.com/opencv/opencv/tree/master/data/haarcascades 1.找到haarcascade_frontalface_defa ...

  3. OpenAL介绍

    OpenAL(Open Audio Library)是自由软件界的跨平台音效API,由Loki Software,使用在Windows.Linux 系统上,用在音效缓冲和收听中编码. OpenAL设计 ...

  4. 专利|Pct||

    专利:有些专利写的尽量模糊,为了不让别人检出,让别人能轻易侵犯专利权 优先权:在本国申请后,在他国也是同一个专利人申请,并也是同一个申请日. 发明20年:实用新型外观设计:20年 Pct:专利合作条约 ...

  5. AndroidP推出多项AI功能,会不会引发新的隐私担忧?

    让谷歌很"伤心"的是,相比苹果iOS系统的统一,Android系统的碎片化态势实在太严重了.就像已经发布一年多的Android O,其占有率仅有4.6%.主要是因为很多手机厂商都会 ...

  6. CF-544:部分题目总结

    -------------------昨天打的重现赛,感觉是我打的发挥的最好的一场比赛了,六题都一次AC.那么就来总结一下吧 题目链接:http://codeforces.com/contest/11 ...

  7. NEON优化之《简介》

    NDK支持NEON环境配置:https://blog.csdn.net/app_12062011/article/details/50462351 一个很典型的例子:http://hilbert-sp ...

  8. fiddler问题汇总

    fiddler教程:https://kb.cnblogs.com/page/130367/ fiddler下载安装:https://www.cnblogs.com/mini-monkey/p/1128 ...

  9. CentOS7下MySQL5.7的安装-RPM方式

    Installing MySQL on Linux Using RPM Packages 下载安装包 mysql下载地址:https://dev.mysql.com/downloads/mysql/ ...

  10. OSCACHE介绍

    Cache是一种用于提高系统响应速度.改善系统运行性能的技术.尤其是在Web应用中,通过缓存页面的输出结果,可以很显著的改善系统运行性能.本文中作者给大家介绍一个实现J2EE框架中Web应用层缓存功能 ...