vuepress-theme-vdoing/docs/01.前端/40.学习笔记/50.JS设计模式总结笔记.md

138 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: JS设计模式总结笔记
date: 2021-02-27 20:01:18
permalink: /pages/4643cd/
categories:
- 前端
- 学习笔记
tags:
- 设计模式
author:
name: xugaoyi
link: https://github.com/xugaoyi
---
# JS设计模式总结笔记
## 开篇:前端工程师的成长论
能够决定一个前端工程师的本质的,不是那些瞬息万变的技术点,而是那些**不变的东西**。
所谓“不变的东西”,就是**驾驭技术的能力**。
具体来说,它分为以下三个层次:
- 能用健壮的代码去解决具体的问题;
- 能用抽象的思维去应对复杂的系统;
- 能用工程化的思想去规划更大规模的业务。
> 基础理论知识是一个人的基线,理论越强基线越高。再为自己定一个目标和向上攀附的阶梯,那么达到目标就是时间问题,而很多野路子工程师搞了半辈子也未达到优秀工程师的基线,**很多他们绞尽脑汁得出的高深学问,不过是正规工程师看起来很自然的东西**。—— 吴军
## 设计模式之“道”
- 设计模式是“拿来主义”。如使用数学公式,不会从头推导一个公式。
### 核心思想
- 设计模式的核心思想——**封装变化**
- 保证可维护性、可扩展性。
- 将变与不变分离,确保变化的部分灵活,不变的部分稳定。——这就是所谓的“健壮”的代码。
## 设计模式之“术”
即最经典的**23种设计模式**。按`创建型`、`结构型`、`行为型`划分。
### 创建型
1. 单例模式
2. 原型模式
3. 构造器模式
4. 工厂模式
5. 抽象工厂模式
### 结构型
1. 桥接模式
2. 外观模式
3. 组合模式
4. 装饰器模式
5. 适配器模式
6. 代理模式
7. 享元模式
### 行为型
1. 迭代器模式
2. 解释器模式
3. 观察者模式
4. 访问者模式
5. 状态模式
6. 备忘录模式
7. 策略模式
8. 模板方法模式
9. 职责链模式
10. 命令模式
## 小结:
- 创建型模型封装了创建对象过程中的变化。
- 结构型模式封装了对象之间组合方式的变化。目的在于灵活的表达对象间的配合与依赖关系。
- 行为型模式将对象千变万化的行为进行抽离,确保安全、方便的更改。
## 创建型:工厂模式-简单工厂——区分“变与不变”
先了解构造器模式在JS中的构造函数即构造器。使用构造函数即使用构造器模式。
### 构造器模式
```js
function User(name, age, career){
this.name = name
this.age = age
this.career = career
}
const user = New User('张三', 18, '前端工程师')
```
变与不变user的属性(name, age, car)不变,即共性。变的是属性值,即个性。
### 简单工厂模式
```js
function User(name , age, career, work) {
this.name = name
this.age = age
this.career = career
this.work = work
}
// 工厂函数 (将变的部分抽离出一个函数)
function Factory(name, age, career) {
let work
switch(career) {
case 'coder':
work = ['写代码','写系分', '修Bug']
break
case 'product manager':
work = ['订会议室', '写PRD', '催更']
break
case 'boss':
work = ['喝茶', '看报', '见客户']
// 其它工种的职责分配
//case 'xxx':
//...
return new User(name, age, career, work)
}
```
工厂模式就是将创建对象的过程单独封装。