Wang's blog Wang's blog
首页
  • 前端文章

    • HTML教程
    • CSS
    • JavaScript
  • 前端框架

    • Vue
    • React
    • VuePress
    • Electron
  • 后端技术

    • Npm
    • Node
    • TypeScript
  • 编程规范

    • 规范
  • 我的笔记
  • Git
  • GitHub
  • VSCode
  • Mac工具
  • 数据库
  • Google
  • 服务器
  • Python爬虫
  • 前端教程
更多
收藏
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Wang Mings

跟随大神,成为大神!
首页
  • 前端文章

    • HTML教程
    • CSS
    • JavaScript
  • 前端框架

    • Vue
    • React
    • VuePress
    • Electron
  • 后端技术

    • Npm
    • Node
    • TypeScript
  • 编程规范

    • 规范
  • 我的笔记
  • Git
  • GitHub
  • VSCode
  • Mac工具
  • 数据库
  • Google
  • 服务器
  • Python爬虫
  • 前端教程
更多
收藏
关于
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • Python爬虫

  • 前端教程

    • 团队规范

    • Project

    • JS

    • NodeJS

    • Vue

    • React

    • 效率工具

    • 读书笔记

      • 如何做到十倍阅读量
      • 《敏捷开发》读后总结
      • 《给大家看的设计书》笔记
      • 《Head First Design Patterns》
        • [#](#设计原则) 设计原则
        • [#](#设计模式) 设计模式
          • [#](#观察者模式) 观察者模式
          • [#](#迭代器模式) 迭代器模式
          • [#](#组合模式) 组合模式
          • [#](#模版方法) 模版方法
          • [#](#命令模式) 命令模式
      • 《HTTP图解》
      • 《JavaScript高级程序设计》
      • 读书精要
      • 程序员软技能指南
      • 《你不知道的JavaScript》
  • 教程
  • 前端教程
  • 读书笔记
wangmings
2022-07-19
目录

《Head First Design Patterns》

# # 《Head First Design Patterns》

这是一本十分经典的关于设计模式的书,以前阅读过这本书,这次重新阅读又增加了新的理解。书本中一些经典案例的讲解,联系到平时工作中的应用,对设计模式有了更加深入的思考。这里给出工作中总结的常用JS设计模式

# # 设计原则

  1. 找出应用中可能需要变化之处,把它们独立出来,不要把和那些不变化的代码混合在一起
    // bad
    // 飞行技能和叫声不是每只鸭子都会的(比如橡皮鸭),所以不能放在鸭子Duck基类中
    class Duck {
        // common
        eat();
        sleep();
    
        // special
        fly()
        quack()
    }
    
1
2
3
4
5
6
7
8
9
10
11
12
  1. 针对接口编程,而不是针对实现编程
    Dog d = new Dog() // 针对实现编程
    Animal d = new Dog() // 针对接口编程(Dog extend Animal)
    
1
2
3
  1. 多用组合,少用继承
    // bad
    // 飞行和叫声是接口,需要每次都实现,不好
    class RedHeadDuck extend Duck interfaces IFly, IQuack {
    
    }
    
    // good
    class RedHeadDuck extend Duck {
        FlyBehavior fly;
        QuackBehavior quack;
    }
    
1
2
3
4
5
6
7
8
9
10
11
12

# # 设计模式

# # 观察者模式

  • 特点是一对多
  • 需要有订阅关系(这样发布才通知的到)

# # 迭代器模式

  • 提供一种方法顺序访问一个聚合对象的各个元素,而又不暴露其内部的表示。
  • 即不同的迭代方式换成统一的iterator.next()

# # 组合模式

  • 允许你将对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象与组合对象。

# # 模版方法

  • 在一个方法中定义算法的骨架,而将一些步骤延迟到子类。
  • 模板方法可以在不改变结构算法的基础上,重新定义算法中的某些步骤

# # 命令模式

  • 将“请求“封装成对象,以便使用不同的请求来参数化其他对象。
  • eg:n种缓存方式 + 缓存管理类(管理类面向最终用户,但内部调用还是使用缓存)
    // n种缓存方式
    class LocalStorage extend ICache{}
    class ObjectStorage extend ICache{}
    ...
    
    // 管理类
    class CacheManage {
        constructor(ICache cache){
            this.cache = cache
        }
    
        get() {
            return this.cache.get()
        }
    }
    
    
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
编辑 (opens new window)
《给大家看的设计书》笔记
《HTTP图解》

← 《给大家看的设计书》笔记 《HTTP图解》→

最近更新
01
theme-vdoing-blog博客静态编译问题
09-16
02
搜索引擎
07-19
03
友情链接
07-19
更多文章>
Theme by Vdoing | Copyright © 2019-2022 Evan Xu | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式