浅谈前端设计模式1:面向对象、设计原则、设计模式

182 阅读3分钟

前言

设计模式应该分为“设计”和“模式”两部分来学习。首页是设计原则,然后是再从设计到模式。因为设计模式都是基于面向对象的,所以需要先了解一下面向对象。

一、面向对象

1.1、面向对象的概念

面向对象编程(Object Oriented Programming,缩写为 OOP)是目前主流的编程范式。它将真实世界各种复杂的关系,抽象为一个个对象,然后由对象之间的分工与合作,完成对真实世界的模拟。

ES5使用构造函数(constructor)作为对象的模板。所谓”构造函数”,就是专门用来生成实例对象的函数。ES6引入了 Class(类)这个概念,作为对象的模板。

1.2、面向对象三要素

继承:子类继承父类

  1. 父类是公共的,不仅仅服务于某个子类。
  2. 继承可将公共方法抽离出来,提高复用,减少冗余。

封装:数据的权限和保密

在真正的面向对象语言(如:C++和Java)中,可以使用以下三个关键字来定义属性或方法

  • public完全开放
  • protected对子类开放
  • private对自己开放

这三个用于定义属性和方法 ES6尚不支持,typescript支持。

  1. 减少耦合,不该外露的不外露
  2. 利于数据、接口的权限管理
  3. ES6 目前不支持,一般认为_开头的属性是private

多态:同一接口不同实现

JS应用很少,需要结合java等语言的接口、重写、重载等功能。


二、设计原则

2.1、通过《LINUX/UNIX设计哲学》理解何为设计

设计准则

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

小准则

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

2.2、SOLID五大设计原则

  • S - 单一职责原则 一个程序只做一件事,如果功能过去复杂就拆分开,每个部分保持独立

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

  • L - 李氏置换原则 子类能覆盖父类,父类能出现的地方子类就能出现。JS中使用较少(弱类型&继承使用较少)。

  • I - 接口独立原则 保持接口的单一独立,避免出现“胖接口”,JS中没有接口(除typescript),使用较少。类似于单一职责原则,这里更关注接口。

  • D - 依赖倒置原则 面向接口编程,依赖于抽象而不依赖于具体。使用方只关注接口而不关注具体类的实现。JS中使用较少(没有接口&弱类型)。


三、设计模式

“设计”和“模式”应该分开来看,从设计到模式。

23种设计模式

  • 创建型 工厂模式(工厂方法模式、抽象工厂模式、建造者模式)、单例模式、原型模式

  • 组合型 适配器、装饰器、代理、外观、桥接、组合、享元

  • 行为型 策略、模板方法、观察者、迭代器、职责链、命令、备忘录、状态、访问者、中介者、解释器