JS设计模式学习_基础篇

栏目: 后端 · 发布时间: 5年前

内容简介:设计模式的定义:在面向对象软件设计过程中针对特定问题的简洁而优雅的解决方案当然我们可以用一个通俗的说法:比如,当系统中某个接口的结构已经无法满足我们现在的业务需求,但又不能改动这个接口,因为可能原来的系统很多功能都依赖于这个接口,改动接口会牵扯到太多文件。因此应对这种场景,我们可以很快地想到可以用适配器模式来解决这个问题。

一、写在前面

设计模式的定义:在面向对象软件设计过程中针对特定问题的简洁而优雅的解决方案

当然我们可以用一个通俗的说法: 设计模式是解决某个特定场景下对某种问题的解决方案 。因此,当我们遇到合适的场景时,我们可能会条件反射一样自然而然想到符合这种场景的设计模式。

比如,当系统中某个接口的结构已经无法满足我们现在的业务需求,但又不能改动这个接口,因为可能原来的系统很多功能都依赖于这个接口,改动接口会牵扯到太多文件。因此应对这种场景,我们可以很快地想到可以用适配器模式来解决这个问题。

以上参考自 网易考拉前端团队-JavaScript设计模式

二、设计原则

设计哲学准则:

  1. 小即是美
  2. 让每个程序只做好一件事
  3. 快速建立原型
  4. 舍弃高效率而取可移植性
  5. 采用纯文本来存储数据
  6. 充分利用软件的杠杆效应(可复用)
  7. 使用 shell 脚本来提高杠杆效应和可移植性
  8. 避免强制性的用户界面
  9. 每个程序都称为过滤器

小准则:

  1. 允许用户定制环境
  2. 尽量使操作系统内核小而轻量化
  3. 使用小写字母且简写 list = ls
  4. 沉默是金
  5. 各部分之和大于整体
  6. 寻求90%的解决方案

三、SOLID设计原则

  • S 单一职责原则 single

    • 一个程序只做好一件事情
    • 如果功能复杂就拆分开,每个部分保持独立
  • O 开放封闭原则 open

    • 对扩展开放,对修改封闭
    • 增加需求时,扩展新需求,而非修改已有代码
    • 这是软件设计的终极目标
  • L 李氏置换原则

    • 子类能覆盖父类
    • 父类能出现的地方子类就能出现
    • JS使用较少
  • I 接口独立原则

    • 保持接口独立,避免出现“胖接口”
    • JS中没有接口(ts)
  • D 依赖导致原则

    • 面向接口编程,依赖于抽象而不依赖于具体
    • 使用方只关心接口而不关心具体类的实现
    • JS使用较少

四、23种设计模式

  • 创建型设计模式
    是一类处理对象创建的设计模式,通过某种方式控制对象的创建来避免基本对象创建时可能导致设计上的问题或增加设计上的复杂度 。工厂模式、单例模式
  • 结构型设计模式
    关注于如何将类或对象组合成更大、更复杂的结构,以简化设计 。适配器模式、装饰器模式、代理模式、外观模式
  • 行为型设计模式
    用于不同对象之间职责划分或者算法抽象,行为型 设计模式 不仅仅涉及类和对象,还涉及类或对象之间的交流模式并加以实现 。观察者模式、迭代器模式、状态模式

五、UML类图

UML(Unified Modeling Language)是一种统一建模语言,为面向对象开发系统的产品进行说明、可视化、和编制文档的一种标准语言。

5.1 类图的表示

类图分三层,第一层显示类的名称,如果是抽象类,则就用斜体显示。第二层是类的特性,通常就是字段和属性。第三层是类的操作,通常是方法或行为。前面的符号, + 表示public,- 表示private,# 表示protected (js中为严格区分,ts中有)

JS设计模式学习_基础篇

那么如何根据类图写出相应的代码结构呢?如下:

JS设计模式学习_基础篇

注:默认不添加属性或方法类型,即为 public,因此 public 可省略

5.2 类关系表示

  • 泛化关系【继承】
    空心箭头表示,是一种继承关系。例如:自行车是车
  • 聚合关系
    空心菱形箭头表示,是整体与部分的关系,与组合关系不同,整体和部分不是强依赖的。例如,部门撤销了,人员不会消失,他们依然存在
  • 组合关系
    实心菱形箭头表示,是整体与部分的关系,但部分不能离开整体而单独存在。如公司和部门是整体和部分的关系,没有公司就不存在部门
  • 关联关系【引用】
    实线(可带单/双箭头)表示,是一种拥有的关系,它使一个类知道另一个类的属性和方法

    JS设计模式学习_基础篇

除了上述类关系外,还有实现关系,依赖关系等表示法,可参考下面博文:

看懂UML类图和时序图

UML 各种图总结精华

六、真题

1 根据下面的信息画UML类图

  • 打车时,可以打快车或者专车。任何车都有车牌号和名称
  • 不同车打车价格不同,快车1元/公里,专车2元/公里
  • 行程开始时显示车辆信息
  • 行程结束时显示打车金额

2 根据下面的信息画UML类图

  • 某停车场,分三层,每层100车位
  • 每个车位都能监控到车辆的驶入和离开
  • 车辆驶入前,显示每层空余车位数量
  • 车辆驶入时,摄像头可识别车牌号和时间
  • 车辆出来时,出口显示器显示车牌号和停车时间

JS设计模式学习_基础篇

分析:

  • 车是一个大类,快车和专车继承自车
  • 行程是一个单独的类,连接用车和开始结束两个动作

JS设计模式学习_基础篇

分析:

  • 关系1:车位组成层,层组成车库。组合关系
  • 关系2:摄像机和显示屏是车库的部分,且能单独存在。聚合关系
  • 车停入车位时,需要判别该车位状态(是否为空车位)
  • 车库需要记录车驶入驶出的状态和记录车位数,需要通过层获取

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

数字化生存

数字化生存

(美)Nicholas Negroponte(尼古拉·尼葛洛庞帝) / 胡泳、范海燕 / 电子工业出版社 / 2017-1-1 / 68.00

《数字化生存》描绘了数字科技为我们的生活、工作、教育和娱乐带来的各种冲击和其中值得深思的问题,是跨入数字化新世界的*指南。英文版曾高居《纽约时报》畅销书排行榜。 “信息的DNA”正在迅速取代原子而成为人类生活中的基本交换物。尼葛洛庞帝向我们展示出这一变化的巨大影响。电视机与计算机屏幕的差别变得只是大小不同而已。从前所说的“大众”传媒正演变成个人化的双向交流。信息不再被“推给”消费者,相反,人们或他......一起来看看 《数字化生存》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码