Lambda博客
  • 自我介绍
  • SSR
    • 浅谈SSR
  • React
    • 页面路由——React-Router
    • 管好你的状态——React-Redux
    • 一个哪行——React详解
    • 左膀右臂一个不少——React初探
  • 问题记录
    • js-xlsx实现纯前端导出excel表格
    • 前端开发需要了解的东西
    • 打造高性能网站
  • JavaScript学习笔记
    • 语法和API
    • js-垃圾回收
    • 收集的JS使用技巧
    • 执行机制
    • 原型和原型链
    • 执行上下文
    • 事件循环
    • JavaScript手写代码
    • 43道JS面试题
    • 悄悄的带走了你的东西——闭包详解
    • 你是个富二代吗?——JavaScript作用域链
    • 捉摸不透的女生——JavaScript类型转换
    • 这是你的女神!——JavaScript
  • 网络学习笔记
    • 强不强——HTTP-协商缓存VS强缓存
    • 网络缓存
    • 我要飞的更高——计算机网络
    • 快点!再快点!——CDN
    • 喜怒哀乐多状态——HTTP状态码
    • 你会爱上我的(ಥ_ಥ) ——TCP详解
    • 隔壁老王想篡位?门都没有——同源策略
  • 软技能
  • 安全专题
    • 保护好自己——网站安全,预防
  • 浏览器兼容性
    • 我是个好人——浏览器兼容性
  • 多图片加载——懒加载详解
  • 数据结构
  • Node
    • Node初探
  • Typescript
    • JS Plus 真香——初探 TypeScript
  • 设计模式
    • 不要花里胡哨,要一套一套——设计模式(1)
    • 学会“套路”——设计模式(2)
  • Vue
    • 实操实干——vue实例记录
    • 停下来,问问自己——Vue-刨根问底
    • 你有喘息的机会吗?——Vue,逐步了解
    • 你累吗?来来来,安利框架——Vue-初次见面
  • 小程序
    • 今天天气怎么样——记一次小程序开发
  • Webpack
    • 蛋糕分割整合工具——Webpack-前端工程化
  • 你一块,我一块——Web-modules 前端模块化
  • HTML5
    • 你会画小猪佩奇吗?—— canvas
    • 画个矢量图——HTML5-SVG
    • 听说你爱闹腾——HTML5-多媒体
    • 动画神器——HTML5-requestAnimationFrame
    • 留下痕迹——HTML5-客户端存储
    • 你知道指北针吗?——HTML5-DeviceMotionEvent
    • 你在哪啊?我在这啊——HTML5-Geolocation
    • 你到这,你到那——HTML5-拖拽
    • 你从这,到那——HTML5-拖拽上传文件
    • 开启前端之路——HTML 标签
  • 瀑布流(无限滚动)
  • 我是怎么来的?——浏览器渲染原理
  • Css
    • 由大变小,你行吗 —— 移动端
    • 动起来,这样比较炫—— CSS3 动画
    • 请不要拐弯抹角 —— CSS3 选择器
    • 想炫吗?—— CSS3 属性
    • 最后的最后——CSS自问自答
    • 万事开头难?——深入学习前端常见布局
    • 一入前端深似海——BFC剖析
    • 还有哪些好玩的东西——CSS提升
    • 那些好看的页面是怎么形成的——CSS 初识
  • 拿个小本本记下——Cookie
由 GitBook 提供支持
在本页
  • 什么是设计模式
  • 设计模式的目的
  • 面向对象
  • UML 作图方式
  • 设计原则
  • SOLID 五大设计原则
  • 从设计到设计模式
在GitHub上编辑
  1. 设计模式

不要花里胡哨,要一套一套——设计模式(1)

上一页设计模式下一页学会“套路”——设计模式(2)

最后更新于3年前

本专题将会介绍当前前端需要了解的设计模式,通过理解面向对象,UML 类图的关系展现,设计原则介绍,各个模式如何使用五个方面进行讨论学习。

JS中的设计模式请访问

当你开始一个新项目时,你不会立即开始编码。首先必须定义项目的目的和范围,然后列出项目功能和项目说明书。在你可以编码或者你正在处理更复杂的项目之后,你应该选择最适合你项目的设计模式。

什么是设计模式

在软件工程中,设计模式是软件设计中常见问题可重用的解决方案。设计模式代表着经验丰富的软件开发人员使用的最佳实践。设计模式可以被认为是编程模板。

设计模式的目的

设计模式是为了更好的代码重用性,可读性,可靠性,可维护性。

面向对象

面向对象的三要素:

  • 继承

    ——子类继承父类

    • 可将公共方法抽离出来,提高复用,减少冗余

  • 封装

    ——数据的权限和保密

    • 减少耦合,不该外露的不外露

    • 利用数据接口的权限管理

    • 一般认为_开头的属性是 private

    • 通过public,protected,private三种描述变量,但是由于 js 没有这方面的规则,所以相对而言,js 实现起来更加笼统

  • 多态

    ——同一接口不同实现

    • 保持子类的开放性和灵活性

    • 面向接口编程

    • JS 使用极少

为什么要使用面向对象

程序执行的几种方式:顺序,判断,循环,呈现出结构化 面向对象编程使得数据结构化 对于计算机而言,结构化的才是最简单的 编程应该 简单 & 抽象

  • 抽象完才能简单

  • 简单的前提是我们要抽象好

下面我们来看一下面向对象的基本使用,两个类分别封装自己的数据,通过一个类继承另一个类来实现功能

class People {
  // 父类的属性
  constructor(name, age) {
    this.name = name
    this.age = age
  }
  // 父类定义的方法
  eat(food) {
    console.log(`${this.name} ate ${food} today.`)
  }
  drink(water) {
    console.log(`${this.name} drank ${water} today.`)
  }
}

// 子类继承父类
class Student extends People {
  constructor(name, age, number) {
    super(name, age)
    this.number = number
  }
  study(subject) {
    console.log(`My name is ${this.name}
    My student number is ${this.number}
    I learned ${subject} today.`)
  }
}

let lambda = new People('lambda', 18)
lambda.eat('rice') // lambda ate rice today.
lambda.drink('water') // lambda drank water today.

let lambda_ = new Student('lambda_', 20, 20190924)
lambda_.eat('fruit') // lambda_ ate fruit today.
lambda_.drink('coffee') // lambda_ drank coffee today.
lambda_.study('JavaScript')
/**
 * My name is lambda_
  My student number is 20190924
  I learned JavaScript today.
*/

UML 作图方式

这里呈现简单的 UML 作图方式

  • 通过 + 表示 public

  • 通过 # 表示 protected

  • 通过 - 表示 private

  • 通过 方法名() 表示方法,括号内可传入参数

  • 在 :后面写属性或者方法返回值类型

设计原则

何为设计

即按照哪一种思路或者标准来实现功能,功能相同,可以有不同设计方案来实现,伴随着需求增加,设计的作用才能体现出来。

通过《UNIX/LINUX 设计哲学》这本书我们来总结一下设计准则

  • 小即是美

  • 让每个程序只做好一件事

  • 快速建立原型

  • 舍弃高效率而取可移植性

  • 采用纯文本来存储数据

  • 充分利用软件的杠杆效应(复用)

  • 使用 shell 脚本来提高杠杆效应和可移植性

  • 避免强制性的用户界面

  • 让每个程序都称为过滤器

小准则

  • 允许用户定制环境

  • 尽量使操作系统内核小而轻量化

  • 使用小写字母并且尽量简写

  • 沉默是金

  • 各部分之和大于整体

  • 寻求 90%的解决方案

SOLID 五大设计原则

  • S - 单一职责原则

  • O - 开放封闭原则

  • L - 李氏置换原则

  • I - 接口独立原则

  • D - 依赖导致原则

S - 单一职责原则

  • 一个程序只做好一件事

  • 如果功能过于复杂就拆分开,每个部分保持独立

O - 开放封闭原则

  • 对扩展开放,对修改封闭

  • 增加需求时,扩展新代码,而非修改已有代码

  • 这是软件设计的终极目标

L - 李氏置换原则

  • 子类能覆盖父类

  • 父类能出现的地方子类就能出现

I - 接口独立原则

  • 保持接口的单一独立,避免出现“胖接口”

D - 依赖导致原则

  • 面向接口编程,依赖于抽象而不依赖于具体

  • 使用时只关注接口,而不关注具体类的实现

从设计到设计模式

总体来说设计模式分为三大类:

  • 创建型

  • 结构型

  • 行为型

创建型模式中有三种

  • 工厂模式

    • 工厂方法模式

    • 抽象工厂模式

    • 建造者模式

  • 单例模式

  • 原型模式

结构型模式有七种

  • 适配器模式

  • 桥接模式

  • 装饰器模式

  • 组合模式

  • 代理模式

  • 享元模式

  • 外观模式

行为型模式有十一种

  • 观察者模式

  • 迭代器模式

  • 策略模式

  • 模板方法模式

  • 访问者模式

  • 职责链模式

  • 命令模式

  • 备忘录模式

  • 状态模式

  • 中介模式

  • 解释器模式

uk9gfJ.png
ukPUrq.png

不过对于前端开发人员来说,有的设计模式在平时工作中几乎用不到或者很少用到,接下来我们一起讨论几种常见的设计模式。

前端需要了解的设计模式(2)
前端需要了解的设计模式