设计模式目的

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

设计六大原则

1.单一原则 (SRP)

实现类要职责单一,一个类只做一件事或者一类事,不要将功能无法划分为一类的揉到一起,答应我好吗

2.里氏替换原则(LSP)

不要破坏继承体系,子类可以完全替换掉他们所继承的父类,可以理解为调用父类方法的地方换成子类也可以正常执行调用,爸爸打下的江山儿子继位得无压力好吗

3.依赖倒置原则(DIP)

我说下我的理解,如果某套功能或者业务逻辑可能之后会出现并行的另外一种模式或者较大的调整,那不如把这部分逻辑抽象出来,创建一个包含相关方法的抽象类,而实现类继承这个抽象类来重写抽象类中的方法,完成具体的实现,调用这些功能方法的类不需要关心自己调用的这些个方法的具体实现,只管调用这些抽象类中定义好的形式上的方法即可,不与实际实现这些方法的类发生直接依赖关系,方便之后的实现逻辑的替换更改;

4.接口隔离原则(ISP)

在设计抽象类的时候要精简单一,
白话说就是,A需要依赖B提供的一些方法,A我只用B的3个方法,B就尽量不要给A用不到的方法啦;

5.迪米特法则(LoD)

降低耦合,尽量减少对象之间的直接的交互,如果其中一个类需要调用另一个类的某一个方法的话,可通过一个关系类发起这个调用,这样一个模块修改时,就可以最大程度的减少波及。

6.开放-封闭原则(OCP)

告诉我们要对扩展开放,对修改关闭,你可以继承扩展我所有的能力,到你手里你想咋改咋改,但是,别 动我 本人 好吗?好的

知识点补充

区分属性和方法

  1. let book = function(id,name,price){
  2. // 私有属性
  3. let _num = 1;
  4. // 私有方法
  5. function _checkId(){}
  6. // 特权方法
  7. this.getName = function(){};
  8. this.setName = function(){};
  9. // 对象共有属性
  10. this.id = id;
  11. // 对象共有方法
  12. this.copy = function(){}
  13. // 构造器——在对象创建时通过调用这些特权方法
  14. this.getName(name)
  15. }

私有变量

私有变量就是只能在类内部访问的变量,外部无法访问的变量

特权方法

可以访问私有属性或私有方法的方法

在构造函数外面通过点语法(或者class内使用static)定义的属性以及方法

  • 静态共有方法
  • 静态共有属性

    使用this,或者prototype对象来操作的属性以及方法

  • 共有属性

  • 共有方法

ES6实现私有变量

约定命名:,就是团队自行约定一种代表着私有变量的命名方式,一般是在私有变量的名称前加上一个下划线

闭包实现

  1. class A {
  2. constructor (x) {
  3. let _x = x
  4. this.showX = function () {
  5. return _x
  6. }
  7. }
  8. }
  9. let a = new A(1)
  10. // 无法访问
  11. a._x // undefined
  12. // 可以访问
  13. a.showX() // 1

缺点

  1. 增加了额外的性能开销
  2. 构造函数包含了方法,较为臃肿,对后续维护造成了一定的麻烦(很多时候,看到代码写成一坨就不想看 -_-)

    进阶版闭包

    ```javascript // 利用闭包生成IIFE,返回类A const A = (function() { // 定义私有变量_x let _x

    class A {

    1. constructor (x) {
    2. // 初始化私有变量_x
    3. _x = x
    4. }
    5. showX () {
    6. return _x
    7. }

    }

    return A })()

let a = new A(1)

// 无法访问 a._x // undefined // 可以访问 a.showX() //1

```