I amQiana , WELCOME.

NO TRY , NO HIGH

[读书笔记]JavaSript 设计模式-01

基于《JavaScript设计模式》前八章及《JavaScript设计模式与开发实践》引言部分读书笔记。

模式是什么?

一种可复用的解决方案,可用于解决软件设计中遇到的常见问题。

设计模式是什么?

在面向对象软件设计过程中针对特定问题的简介而优雅的解决方案。

通俗的说,设计模式是在某种场合下对某个问题的一种解决方案,或者说是给面向对象软件开发中的一些好的设计去个好名字。这些好的”设计”并不是GoF发明的,而是早已存在于软件开发中。GoF将这些”好的设计”从浩瀚的面向对象世界中挑选出来,并且给予它们一个好听又好记的名字。
一个好的设计方案有了名字之后,才能被更好的传播,人们才有更多地机会去分享和学习。

设计模式的结构?

  • 模式名称(描述)
  • 上下文大纲(模式在上下文中更加有效,更加有说服力)
  • 问题陈述(该设计模式存在的必要性)
  • 解决方案(步骤)
  • 设计(描述,特别是与它交互的用户行为)
  • 实现(有关如何实现模式的指导)
  • 插图
  • 示例(最小形式的模式实现)
  • 辅助条件(需要哪些其他模式来支持所描述模式的使用?)
  • 关系(这种模式像哪种模式?它是否极力模仿其他模式?)
  • 已知用法(是广泛使用的模式?如果是,在哪里使用?如何使用?)
  • 讨论(该模式能带来的利与弊)

设计模式类别

某一种设计模式都重点关注一个特定的面向对象设计问题或设计要点,描述合适使用,在另一些约束条件下啥都还能使用,以及使用的效果和利弊。
  • 创建型设计模式(专注于对象创建机制,以适合给定情况的方式来创建对象),包含的模式有:
    • Constructor(构造器)
    • Factory(工厂)
    • Abstract(抽象)
    • Prototype(原型)
    • Singleton(单例)
    • Builder(生成器)
  • 结构型设计模式(与对象组合有关,通常可以用于找出在不同对象之间建立关系的简单方法),包含的模式有:
    • Decorator(装饰者)
    • Facade(外观)
    • Flyweight(享元)
    • Adapter(适配器)
    • Proxy(代理)
  • 行为设计模式(专注于该删或者简化系统中不同对象之间的通信),包含的模式有:
    • Iterator(迭代器)
    • Mediator(中介者)
    • Observer(观察者)
    • Visitor(访问者)

反模式

如果我们认为一种模式代表一种最佳实践,那么一种反模式就代表我们已经学到的教训。
描述一种针对某个特定问题的不良解决方案,该方案会导致糟糕的情况发生。

设计模式的通用性

设计模式被一些人认为只是夸夸其谈的东西,使用设计模式可能会增加复杂性,或带来额外的代码。
从某种角度看,设计模式确实可能带来代码量的增加,或许也会把系统逻辑搞得更加复杂。但软件开发的成本并非全部都在开发阶段,设计模式的作用就是让人们写出可重用和可维护的程序。
所有设计模式都遵循一条原则,即“找出程序中变化的地方,并将变化封装起来”。当我们封装了可变部分,那么剩下的就是不可变部分,这些不变和稳定的部分是很容易复用的。
比如假设有一个空房间,我们需要日复一日的往里面扔东西。最简单的方法当然是直接扔了,但是时间久了会发现想要从这个房间找到想要的东西会变得越来越难。所以在房间里放一些箱子来分类更好的选择,虽然箱子会增加我们的成本,放的时候也不再是随便乱扔了,但是找起东西来就方便多了
使用这些箱子的过程,或许就对应于使用设计模式的过程。