设计模式

一套被反复使用、多数人知晓、经过分类、代码设计经验的总结,设计模式是软件工程的基石

分类

构造器模式

使用 function 或者 class 定义一个对象类型,由该类型new出具有共同特征的单个对象。

1
2
3
4
5
6
7
8
9
10
11
12
function Person(name,sex,age){
this.name=name;
this.age=age;
this.sex=(sex)=>{
return sex?'boy':'girl'
}
}

let xixi = new Person('嘻嘻嘻',false,18)
let haha = new Person('哈哈哈',true,22)

console.log(xixi.sex(),haha.name)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Person{
constructor(name,sex,age){
this.name=name;
this.age=age;
this.sex=(sex)=>{
return sex?'boy':'girl'
}
}

half(){
return this.age/2
}
}

let xixi = new Person('嘻嘻嘻',false,18)
let haha = new Person('哈哈哈',true,22)

console.log(xixi.sex(),haha.half())

原型模式

在使用function构造对象类的时候使用继承原型的公共方法处理同样的问题的优化模式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function Person(name,sex,age){
this.name=name;
this.age=age;
this.sex= this.sexJudge(sex)

}
Person.prototype.sexJudge=(sex)=>{
return sex?'boy':'girl'
}

let xixi = new Person('嘻嘻嘻',false,18)
let haha = new Person('哈哈哈',true,22)

console.log(xixi.sex,haha.name)
  • 工厂模式
  • 模块模式
  • 混很模式
  • 单例模式
  • 发布订阅模式

设计原则

  • 开闭原则
    对拓展开放、对修改关闭
  • 里氏转换原则
    子类继承父类,可以独立运行
  • 依赖倒转原则
    引用一个对象时如果该对象有底层类型则直接调用底层
  • 接口隔离原则
    每种接口都应该是独立存在的

  • 合成复用原则
    新的对象应该优先选择已有的对象进行组合,而不是直接新建

  • 迪米特原则
    一个对象应该尽可能少的和其他实体发生关联