初面网初面网

抽象工厂模式

抽象工厂不直接生成实例,而是用于对产品类簇的创建

class User{
  constructor(name, role, pages){
    this.name = name
    this.role = role
    this.pages = pages
  }

  welcome(){
    console.log("欢迎回来",this.name)
  }

  dataShow(){
    // abstract
    throw new Error("抽象方法需要被实现")
  }
}

class SuperAdmin exteds User{
  constructor(name){
    super(name, "superadmin", ["home","user-manage", "right-manage", "news-manage"])
  }

  dataShow(){
    console.log("superadmin-datashow")
  }

  addRight(){}

  addUser(){}
}

class Admin exteds User{
  constructor(name){
    super(name, "superadmin", ["home","user-manage", "news-manage"])
  }

  dataShow(){
    console.log("superadmin-datashow")
  }

  addUser(){}
}

class Editor exteds User{
  constructor(name){
    super(name, "superadmin", ["home","news-manage"])
  }

  dataShow(){
    console.log("superadmin-datashow")
  }
}

function getAbstractUserFactory(role){
  switch(role){
    case "superadmin":
      return SuperAdmin
    case "admin":
      return Admin
    case "editor":
      return Editor
    default:
      throw new Error("参数错误")
  }
}

let userClass = getAbstractUserFactory("superadmin")
// console.log(userClass)
let user = new UserClass("tom")
// user.dataShow()
// user.welcome()

更新于 2025/2/26