《设计模式》之重点总结

第一章  面对对象的javascript

1.1 动态类型语言和鸭子类型

1.编程语言按照数据类型分为:静态类型语言和动态类型语言。

2.静态类型语言:在编译时已确定变量的类型。

  优点:(1)在编译期间就能发现类型不匹配的错误,编辑器可以帮助我们提前避免程序在运行期间有可能发生的一些错误。

   (2)如果在程序中明确的规定了数据类型,编译器还可以针对这些信息对程序进行一些优化工作,提高执行效率。

  缺点:(1)迫使程序猿按照强契约来编写程序。

     (2)类型的声明会增加代码量。编程细节会分散程序猿的精力,不能专心于业务代码的编写。

3.动态类型语言:当程序运行时,待某个变量被赋值后,才能确定变量的数据类型。

  优点:编写代码数量少,更加简洁,让程序猿专注于业务逻辑,而不是语法细节。

  确定:无法保证变量的类型,从而在程序运行期间可能会发生数据类型相关的错误。

4.鸭子类型:如果它走起来像鸭子,叫起来像鸭子,那么它就是鸭子。

1.2 多态

1.多态的实际含义:同一操作作用于不同的对象上面,可以产生不同的解释和不同的执行结果。

通俗一些说:对不同的对象执行相同方法名的方法,可以产生不同的执行结果。

多态的本质思想:“做什么”和“谁去做以及怎样去做”分离开来,也就是将“不变的事物”与“可能改变的事物”分离开来。

对比的例子:

无隔离,无封装的代码

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

隔离不变,封装变化的代码

var makeSound = function(animal){
	animal.sound();
}
function Duck(){};
Duck.prototype.sound = function(){
	console.log("嘎嘎嘎");
}
function Chicken(){};
Chicken.prototype.sound = function(){
	console.log("咯咯咯");
}
makeSound(new Duck);//嘎嘎嘎
makeSound(new Chicken);//咯咯咯

未完待续。。。

时间: 2024-10-12 20:01:39

《设计模式》之重点总结的相关文章

[转]设计模式--六大原则与三种类型

一.6大原则 1.单一职责原则(Single Responsibility Principle) 定义:就一个类而言,应该仅有一个引起它变化的原因: 如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责变化可能会消弱或者抑制这个类完成其他职责的能力.这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏: T负责两个不同的职责:职责P1,职责P2.当由于职责P1需求发生改变而需要修改类T时,有可能会导致原本运行正常的职责P2功能发生故障.也就是说职责P1和P2被耦合在了一起

转载 java学习注意点

原文地址http://www.cnblogs.com/xrq730/p/5260294.html 前言 因为和同事有约定再加上LZ自己也喜欢做完一件事之后进行总结,因此有了这篇文章.这篇文章大部分内容都是面向整个程序员群体的,当然因为LZ本身是做Java开发的,因此有一部分内容也是专门面向咱们Java程序员的. 简单先说一下,LZ坐标杭州,13届本科毕业,算上年前在阿里巴巴B2B事业部的面试,一共有面试了有6家公司(因为LZ不想请假,因此只是每个晚上去其他公司面试,所以面试的公司比较少),其中成

学习笔记_Java_day13_JSTL标签库(1、2、3、4、5、6、7、8)

1.一种标签语言 day13 l  JSTL标签库(重点) l  自定义标签(理解) l  MVC设计模式(重点中的重点) l  Java三层框架(重点中的重点) JSTL标签库 1 什么是JSTL JSTL是apache对EL表达式的扩展(也就是说JSTL依赖EL),JSTL是标签语言!JSTL标签使用以来非常方便,它与JSP动作标签一定,只不过它不是JSP内置的标签,需要我们自己导包,以及指定标签库而已! 如果你使用MyEclipse开发JavaWeb,那么在把项目发布到Tomcat时,你会

3年工作经验程序员应有的技能

每个程序员.或者说每个工作者都应该有自己的职业规划,如果看到这里的朋友没有自己的职业规划,希望你可以思考一下自己的将来... 因为和同事有约定再加上LZ自己也喜欢做完一件事之后进行总结,因此有了这篇文章.这篇文章大部分内容都是面向整个程序员群体的,当然因为LZ本身是做Java开发的,因此有一部分内容也是专门面向咱们Java程序员的. 简单先说一下,LZ坐标杭州,13届本科毕业,算上年前在阿里巴巴B2B事业部的面试,成都web前端培训一共有面试了有6家公司(因为LZ不想请假,因此只是每个晚上去其他

昨天看到一位前辈的总结 有感转一下

对于程序员来说,每天或者是每段时间应该干什么?  是应该保持在原地停留,还是更深入的去研究新的技术呢? 一直被惰性驱使的我们,何时能静下心来,探索一些新的知识? 以此文鼓励自己,激励自己去学习更多新的知识,更深入的研究知识! -------------此文转自 原文地址http://www.cnblogs.com/xrq730/p/5260294.html,转载请注明出处,谢谢! 前言 因为和同事有约定再加上LZ自己也喜欢做完一件事之后进行总结,因此有了这篇文章.这篇文章大部分内容都是面向整个程

工作了3年的JAVA程序员应该具备什么技能?(zhuan)

http://www.500d.me/article/5441.html **************************************** 来源:五百丁 作者:LZ2016-03-18 因为和同事有约定再加上LZ自己也喜欢做完一件事之后进行总结,因此有了这篇文章.这篇文章大部分内容都是面向整个程序员群体的,当然因为LZ本身是做Java开发的,因此有一部分内容也是专门面向咱们Java程序员的. 简单先说一下,LZ坐标杭州,13届本科毕业,算上年前在阿里巴巴B2B事业部的面试,一共有

JAVA程序员面试总结,高手整理加强版

每个程序员.或者说每个工作者都应该有自己的职业规划,分享高手整理的java程序员面试总结给愿意思考自己未来的朋友们. 第一阶段:三年 我 认为三年对于程序员来说是第一个门槛,这个阶段将会淘汰掉一批不适合写代码的人.这一阶段,我们走出校园,迈入社会,成为一名程序员,正式从书本 上的内容迈向真正的企业级开发.我们知道如何团队协作.如何使用项目管理工具.项目版本如何控制.我们写的代码如何测试如何在线上运行等等,积累了一定的 开发经验,也对代码有了一定深入的认识,是一个比较纯粹的Coder的阶段. 第二

超全面的JavaWeb笔记day13<JSTL&自定义标签>

1.JSTL标签库(重点) core out set remove url if choose when otherwise forEach fmt formatDate formatNumber 2.自定义标签(理解) 步骤 标签处理类 tld文件 jsp中<%@taglib%> 处理类 实现SimpleTag接口 继承SimpleTagSupport类 有标签体的标签 不执行下面内容的标签 带有属性的标签 3.MVC设计模式(重点中的重点) M:模型 V:视图 C:控制器 4.Java三层

Design Pattern Interpreter 解析者模式

解析者本身是一个很大的设计模式,重点在于设计这个解析者本身,但是由于解析者本身很难设计,故此完善的解析者模式比较少应用,但是这个设计模式本身的思想却不难. 下面简单实用C++实现一下解析者模式,使用不同的解析者,那么就会对于同样的内容解析出不同的结果. #include <stdio.h> #include <string> using namespace std; class Context { public: string cmd; void setContext(string

【皇甫】?Struts_第一节课

本章讲解内容: DTD是Docunent Type Defintion的缩写,即文档类型定义.DTD用来描述XML文档结构. DOM4J是一个非常优秀的javaXML API,具有性能优异,功能强大和易用的特点. Java反射机制是只在运行状态中,动态获取信息及动态调用对象方法的功能. 使用反射可以在程序运行时创建的实例及访问器属性和方法. MVC设计模式吧系统分为以下3个模块. 模型(Model):对一个的组件是javaBean(java类). 视图(View):对应的最贱是jsp或html文