创建型: 工厂模式(简单工厂)
工厂模式: 就是将创建对象的过程单独封装。有构造函数的地方,就应该想到工厂模式。
优点:
- 创建一个对象只需要知道它得名称即可
- 扩展性高,新增一个产品只要扩展一个工厂类
- 屏蔽内部具体实现,只关心产品对应接口
缺点:
- 每增加一个产品,都要郑家一个具体得对象类工厂,系统类成倍增加,增加系统复杂度。
1 // js 工厂模式 2 function User(name, age, career, work) { 3 this.name = name; 4 this.age = age; 5 this.career = career; 6 this.work = work; 7 } 8 function Factory(name, age, career) { 9 let work; 10 switch (career) { 11 case "coder": 12 work = ["写代码", "写bug"]; 13 break; 14 case "product manager": 15 work = ["开会", "写ppt"]; 16 break; 17 case "boss": 18 work = ["喝茶", "看报"]; 19 break; 20 } 21 return new User(name, age, career, work); 22 } 23 //其实还可以换一种方式 24 function User(name, age, career) { 25 this.name = name; 26 this.age = age; 27 this.career = career; 28 switch (career) { 29 case "coder": 30 this.work = ["写代码", "写系分", "修Bug"]; 31 break; 32 case "product manager": 33 this.work = ["订会议室", "写PRD", "催更"]; 34 break; 35 case "boss": 36 this.work = ["喝茶", "看报", "见客户"]; 37 break; 38 } 39 }
这两种方式都可以实现,但是语义不同:
构造函数 Factory 的职责是判断角色并且添加职责分配,然后调用 User,User只是创建对象,保持 ‘封闭 ’原则。
Factory 可以随时修改,保持 ‘开放’原则。