2016-09-10 曹强
写在前面 从来没有系统地研究过设计模式,之前领悟出来的JavaScript设计模式那纯粹是个人兴起之作,和主流的大家们整理的设计模式还是有不少差距的。这次有幸看到了一本很不错的书。作者归纳地真的很不错,赞叹之余,不忘摘录几段分享给大家。 编写易于维护的代码,其中一个重要方面是能够找到代码中重复出现的主题并优化他们,这就是设计模式有价值的地方。 什么是模式 模式是一种可复用的解决方案,可用于解决软件设计中遇到的常见问题。 more 模式是已经验证的解决方案 模式很容易被复用 模式富有表达力 模式不是一种确切的解决方案,但可以为我们提供一个解决问题的方法 模式的优点 复用模式有助于防止在应用程序开发工程中小问题引发大问题。 继续阅读 »
2016-09-10 曹强
前言 命名、抽象、标识是通用设计结构的主要方面,这些设计结构能被用于构造可复用的面向对象设计。设计模式确定所包含的类和实例、它们的角色、协作方式以及职责分配。 每一种设计模式都重点关注一个特定的对象设计问题或者设计要点,描述何时使用它,在另一些约束条件下是否还能使用,以及使用的效果和利弊。由于我们最终要实现设计,设计模式还是提供了示例,代码来阐明其实现。 虽然设计模式描述的是面向对象设计,但是他们都是基于实际的解决方案。这些设计方案的实现语言是主流面向对象的编程语言。 more 设计模式的分类 创建型设计模式 创建型设计模式专注于处理对象创建机制,以适合给定情况下的方式来创建对象,创建对象的基本方法都可能导致项目复杂性增 继续阅读 »
2014-04-21 W.Y.
我们今天要讨论的主题是,大型 JavaScript 应用中一些有效的设计模式。本文基于我最近发布在 LondonJS 上同名演讲,灵感则来自于 Nicholas Zakas 之前的研究成果。 我是谁以及我为什么要撰写这个主题? 我目前是 AOL 的一名 JavaScript 和 UI 开发人员,负责规划和编写下一代面向用户的应用的前端架构。这些应用不仅复杂,而且需要一种可扩展和高复用的架构,我的职责之一就是确保这类应用中的设计模式尽可能是可持续的。 尽管在这个领域有许多比我知识渊博的专家,我也认为自己是设计模式的狂热者。先前,我基于 Creative Commons 许可写了 《Essential JavaScript Des 继续阅读 »
2016-09-10 曹强
写在前面 Module模式最初被定义为一种在传统软件工程中为类提供私有和公有封装的方法。而在Javascript中,Module模式用于进一步模拟类的概念,通过这种方式,能够使一个单独的对象拥有公有/私有的方法和变量,从而屏蔽来自全局作用域的特殊部分。产生的结果是:函数名与在页面上其他脚本定义的函数冲突的可能性降低。 应当注意的一点是:在Javascript没有private访问修饰符因此算不得真正的私有,而是通过函数作用域来模拟私有这个概念。在Module模式内由于闭包的存在,声明的变量和方法只在该模式内部可用,但在返回对象上定义的变量和方法是可以对外访问的。 more 示例 var testModule=(functi 继续阅读 »
2016-09-10 曹强
前言 在经典的面相对象语言编程中,Constructor是一种在内存已分配给该对象的情况下,用于初始化新创建对象的特殊方法。在Javascript中,几乎所有东西都是对象,我们通常最感兴趣的是object构造器。 object构造器用于创建特定类型的对象——准备好对象以备使用,同时接收构造器可以使用的参数,以在第一次创建对象时,设置成员属性和方法的值。 more 基本Constructor Javascript虽然不支持类的概念,但它确实支持与对象一起用的特殊constructor函数,通过在构造器前面加new关键字,告诉Javascript像使用构造器一样实例化一个新对象,并且对象成员由该函数定义。 在构造器内,th 继续阅读 »
2016-09-10 曹强
写在前面 singleton模式是被熟知的原因是因为它限制了类的实例化次数只能一次。从经典意义上来说,singleton模式在该实例不存在的情况下,可以通过一个方法创建一个类来实现创建类的新实例;如果实例已经存在,它会简单返回该对象的引用。 singleton不同于静态类(或对象),因为我们可以推迟它们的初始化,这通常是因为它们需要一些信息,而这些信息在初始化期间可能无法获得、对于没有察觉到之前的引用的代码,它们不会提供方便检索的方法。这是因为它既不是对象,也不是由一个singleton返回的“类”;它是一个结构。 思考一下闭包变量为何实际上并不是闭包,而提供闭包的函数作用域是闭包。在Javascript中,singleton 继续阅读 »
2016-09-10 曹强
前言 在对Module模式有个熟悉的了解之后,我们来认识一个稍有改进的版本——ChristianHeilmann的Revealing Module模式。 模式的由来 原来的Module模式可能无法实现这样的需求: 当我们从另一个方法调用一个公有方法或者访问公有变量时,必须要重复主对象的名称。而且使用Module时必须要切换到对象字面量表示法来让某种方法变成公有方法。 我们需要的可能是这样的一个模式: 能够在私有范围内简单定义所有的函数和变量,并返回一个匿名对象,它拥有指向私有函数的指针,该函数是它希望展示为公有的方法。 有点拗口,还是上代码吧 (☆_☆) more 代码 ``` var myRevealingModu 继续阅读 »
2016-09-10 曹强
什么是反模式 如果我们认为一种模式代表一种最佳实践,那么一种反模式就代表我们已经学到的教训。反模式这个术语是1995年由安德鲁·凯尼格在当年的11月C++报告中创造的,是受“四人组”所著《设计模式》一书的启发。在凯尼格的报告中,他提出反模式的两个概念: 描述一种针对某个特定问题的不良解决方案,该方案会导致糟糕的情况发生; 描述如何摆脱前述的糟糕情况以及如何创造好的解决方案 more 反模式的由来 每一个设计问题都是以在两个实体之间实现平衡为开始的,即:问题的形式和它的上下文。形式是解决问题的方案;上下文定义该问题。 虽然设计模式很重要,但是理解反模式也同样重要。创建应用程序时,一个项目的声明周期就会以此为起点;一旦完成了初 继续阅读 »
2015-11-06 Jason Liao
对《JavaScript Patterns》和《Learning JavaScript Design Patterns》的一些总结,大部分是以链接的形式链接到更详细的笔记 感谢 汤姆大叔的关于设计模式的文章 和工作室小伙伴东帅,我们的讨论总能迸出点什么,这是他关于 Java Design Patterns 的 repo 继续阅读 »
2014-04-19 W.Y.
一群恶魔的猪从无辜的小鸟那里偷走了所有的前端架构,现在它们要夺回来。一对特工英雄(愤怒的小鸟)将攻击那些卑鄙的猪,直到夺回属于他们的前端架构。(译者注:本系列是关乎前端架构的讨论,作者借用当前最风靡的游戏 - 愤怒的小鸟,为我们揭开了前端架构的真实面目。) 小鸟们最终能取得胜利吗?它们会战胜那些满身培根味的敌人吗?让我们一起来揭示 JavaScript 之愤怒的小鸟系列的另一个扣人心弦的章节! 阅读本系列的介绍文章,查看所有小鸟以及它们的进攻力量。 战况 红色大鸟 - 立即调用的函数表达式 蓝色小鸟 - 事件 黄色小鸟 - 模块化、依赖管理、性能优化 黑色小鸟 - 前端分层架构 白色小鸟 - 代码质量和代码分析 绿色小鸟 - 继续阅读 »