读书笔记

Head-First-设计模式

April 12, 2021
设计模式
读书笔记

第一章 # 开发中的不变真理——CHANGE 设计原则 # 找出应用中可能变化之处,把它们独立出来,不要和哪些不需要变化的代码混在一起。 这是几乎每个设计模式背后的精神所在。所有的模式都提供栏一套方法让“系统中的某部分改变不会影响到其他部分。” 结果如何?代码变化引起的不经意后果变少,系统变得更有弹性。 针对接口编程,而不是针对实现编程。 将鸭子的行为通过接口定义,同一行为的不同表现有不同的实现。这么一来,有了继承的“复用好处”,却没有继承所带来的包袱。 类之间的关系:IS-A, HAS-A, IMPLEMENTS,“有一个”比“是一个”更好。 多用组合,少用继承。 软件开发在完成后花费的时间更多,所以要致力于提高可维护性和扩展性。 定义 # 策略模式定义算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。 继承(is a)--实线三角;实现--虚线三角;有一个--实现箭头; 要点 # 良好的OO设计必须具备可复用、可扩展、可维护三个特性。 继承的缺点 # 代码在多个子类中重复 运行时的行为不容易改变 很难知道所有子类的全部行为 改变会牵一发动全身,造成其他子类不想要的改变。 观察者 # 装饰器 # 工厂模式 # 单例模式 # 命令模式 # 设计原则 # 好莱坞原则 # 模板方法模式,父类属于高层组件,子类属于底层组件。父类是冲向类,其中有若干具体抽象方法,他们是算法的某部分的具体实现,由子类提供。父类还可以定义钩子,用于控制算法流程。 好莱坞原则是说,高层组件会去调用底层组件的方法,不要反向调用。 这样做的好处是避免环形依赖。解耦,其他代码只依赖高级组件,可以减少整个系统的依赖。 框架中比较多。框架提供模板,实现算法的步骤,细节交给使用者实现。

JavaScript语言精华

October 23, 2019
读书笔记

精华 # 我相信我精雕细琢出来的优雅子集大大地优于这门语言的整体,它更可靠、更易读、更易于维护。 浏览器API和DOM相当糟糕,连累了JavaScript。写一本DOM的精华的书是一项不可能完成的任务。 JavaScript中优秀的想法包括函数、弱类型、动态对象和富有变现力的对象字面量表示法。糟粕的想法包括基于全局变量的编程模型。 对象 # JavaScript包含一种原型链的特性,允许对象继承另一个对象的属性。 原型 # 每个对象都连接到一个原型对象,并可以从中继承属性。对象字面量创建的对象都连接到Object.prototype,它是JavaScript中过的标配对象。 函数 # 函数对象 # 函数也是对象,对象字面量创建的对象连接到Object.prototype,函数对象连接到Function.prototype,而它又连接到Object.prototype 函数字面量 # 通过函数字面量创建的函数对象包含一个连到外部上下文的连接。这被称为闭包(closure)。 调用 # 除了声明时定义的形式参数,每个函数还接收两个附加的参数:this和arguments。 this的值取决于调用的模式。有4中调用模式:方法、函数、构造器、apply。 方法调用模式 # 函数被作为一个对象的属性,就教方法。此时this为该对象。 函数调用模式 # 函数没有作为对象的属性,他就被当作一个函数调用了。此模式this被绑定到全局变量。 如果在一个方法内,又定义了一个函数,而这个函数中使用了this,那么这个this就是指向的全局变量。这是一个语言设计错误,正确的设计应该是指向方法中的this。有一个容易的解决方案:将方法中的一个变量赋值为this,函数中访问变量即可。 1 2 3 4 5 6 7 myObject.double = function(){ var that = this; var helper = function(){ that.value = add(that.value, that.value) } helper(); } helper 函数中如果使用 this 这个 this 就是指向全局变量。 构造器调用模式 # JavaScript是一门基于原型继承的语言,这意味这一个对象可以从另一个对象继承属性。该语言是无类型的。(es6呢?) 用 new 调用一个函数,会创建一个连接到该函数的 prototype 成员的新对象,同时将 this 绑定到那个新对象上。这就是构造器调用。 ...