设计模式

本章节主要说明JavaScript的设计模式的各种实现,“设计模式”(Design Pattern)是针对编程中经常出现的、具有共性的问题,所提出的解决⽅法。著名的《设计模式》⼀书⼀共提出了23种模式。

⼀提起设计模式,相信⼤家都会脱⼝⽽出,23种设计模式及设计原则。我们的课程中会给⼤家介绍⼀些常⻅的设计原则,但是如果要想对设计原则应⽤熟练,还需要⽇后⼤家在不断的⼯作中去体会和深⼊了解。

所以也有⼈认为设计模式是“禅”,在悟不在学。但是在初始阶段,我们还是要学习⼀些设计模式的基础实现。

本套课程讲解常⻅设计模式,⼀下10种设计模式是我们在应⽤过程中⽐较常⻅的设计模式

设计原则

  1. 开闭原则:告诉我们要【对扩展开放,对修改关闭】

  2. ⾥⽒替换原则:告诉我们【不要破坏继承体系】

  3. 依赖倒置原则:告诉我们要【⾯向接⼝编程】

  4. 单⼀职责原则:告诉我们实现【类】要【职责单⼀】

  5. 接⼝隔离原则:告诉我们在设计【接⼝】的时候要【精简单⼀】

  6. 迪⽶特法则:告诉我们要【降低耦合度】

设计模式分类

创建型

  1. ⼯⼚模式

  2. 单例模式

  3. 原型模式

结构型

  1. 适配器模式

  2. 代理模式

⾏为型

  1. 策略模式

  2. 迭代器模式

  3. 观察者模式

  4. 命令模式

  5. 状态模式

⼯⼚模式

⼯⼚模式介绍

⼯⼚模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使⽤⼀个共同的接⼝来指向新创建的对象,⽤⼯⼚⽅法代替new操作的⼀种模式。

代码实现

class Animal {
 constructor(name) {
 this.name = name
 }
}
class Creator {
  create(name) {
   return new Animal(name)
 }
}
var creator = new Creator()
  
var duck = creator.create('Duck')
console.log(duck.name) // Duck
  
var chicken = creator.create('Chicken') 
console.log(chicken.name) // Chicken
  
let UserFactory = function (role) {
 if (this instanceof UserFactory) {
   var s = new this[role]();
   return s;
  } else {
   return new UserFactory(role);
  }
 }
UserFactory.prototype = {
 SuperAdmin: function () {
   this.name = "超级管理员",
 this.viewPage = ['⾸⻚', '通讯录', '发现⻚', '应⽤数据', '权限管理']
 },
 Admin: function () {
  this.name = "管理员",
    this.viewPage = ['⾸⻚', '通讯录', '发现⻚', '应⽤数据']
 },
 NormalUser: function () {
  this.name = '普通⽤户',
    this.viewPage = ['⾸⻚', '通讯录', '发现⻚']
 }
}
let superAdmin = UserFactory('SuperAdmin');
let admin = UserFactory('Admin')
let normalUser = UserFactory('NormalUser')

什么时候使⽤⼯⼚模式

以下⼏种情景下⼯⼚模式特别有⽤:

  1. 对象的构建⼗分复杂

  2. 需要依赖具体环境创建不同实例

  3. 处理⼤量具有相同属性的⼩对象