
在讲解 设计模式之前,我们先了解下
1. 什么是面向对象 ?
- 把客观对象抽成属性数据和对数据的相关操作,把内部细节和不相关的信息隐藏起来。
- 把同一个类型的客观对象属性数据和操作绑定在一起,封装成类。
- 并且允许分开不同层次进行抽象,通过继承实现属性和操作的共享。
1:面向对象分析 OOA 。
1:面向对象设计 OOD 。
1:面向对象编程 OOP 。
1.1 概念
- 类,对象(实例)
- 父类是公共的
下面实例 简单实现类的继承:
class Animal {
constructor(name) {
this.name = name
}
eat() {
console.log(`${this.name}吃骨头`)
}
}
class Dog extends Animal {
constructor() {
super('狗')
}
speak() {
console.log('汪汪汪')
}
}
let dog = new Dog()
dog.eat() // 狗吃骨头
dog.speak() // 汪汪汪
这应该是最简洁的一个类的继承了 。
面向对象的三大特性
1、封装
- 把数据封装起来
- 减少耦合,不该外部访问的不要让外部访问
- 利于数据的接口权限管理
- ES6目前不支持,一般认为 _ 开头的都是私有的,不要使用
- 实现
- public 公有修饰符,可以在类的内部活类的外部使用pubilc修饰的属性或行为,默认修饰符。
- protected 受保护的修饰符,可以在本类或者之类使用 protected 修饰的属性或行为。
- private 私有修饰符,只可以在类内使用 private 修饰的属性或行为。
2、继承
提高代码复用性;继承是多态的前提。
3、多态
- 统一接口可以不同实现
- 保持子类的开放性和灵活性
- 面向接口编程
对象的组成
1、方法 函数:过程、动态的
2、属性 变量:状态、静态的
五大设计原则
| 首字母 | 指代 | 概念 |
|---|---|---|
| S | 单一职责原则 | 一个程序只做好一件事,如果功能过于复杂就拆分开,每个部分保持独立 |
| Q | 开发封闭原则 | 对扩展开放,对修改封闭, 增加需求时,扩展新代码,而非修改已有代码 |
| L | 里氏替换原则 | 子类能覆盖父类, 父类能出现的地方子类就能出现 , js中使用较少(弱类型&继承使用较少) |
| I | 接口隔离原则 | 保持接口的单一独立,避免出现“胖接口”, js中没有接口(typescript例外),使用较少 |
| D | 依赖倒置原则 | 面向接口编程,依赖于抽象而不依赖具体, 使用方只关注接口而不关注具体类的实现, js中使用较少(没有接口&弱类型) |
下一篇:JS工厂模式 ,更多请关注:JaveScript设计模式