编程中,在一�?A 类中通过 new 的方式实例化了类 B,那�?A 类和 B 类之间就存在关联(耦合�?- 后期因为需要修改了 B 类的代码和使用方式,比如构造函数中传入参数,那�?A 类也要跟着修改,一个类的依赖可能影响不大,但若有多个类依赖�?B 类,那么这个工作量将会相当的大,容易出现修改错误,也会产生很多的重复代码,这无疑是件非常痛苦的事�?- 这种情况下,就需要将创建实例的工作从调用方(A类)中分离,与调用方*解�?*,也就是使用工厂方法创建实例的工作封装起来(**减少代码重复*),由工厂管理对象的创建逻辑,调用方不需要知道具体的创建过程,只管使用,**而降低调用者因为创建逻辑导致的错�?*�?
functionFactory(career) { functionUser(career, work) { this.career = career this.work = work } let work switch(career) { case'coder': work = ['写代�?, '修Bug'] return new User(career, work) break case 'hr': work = ['招聘', '员工信息管理'] return new User(career, work) break case 'driver': work = ['开�?] returnnewUser(career, work) break case'boss': work = ['喝茶', '开�?, '审批文件'] return new User(career, work) break } } let coder = new Factory('coder') console.log(coder) let boss = new Factory('boss') console.log(boss)
let person = newPerson(); let getPerson = person.getPerson;
getPerson() === person; // true
@readonly
readonly装饰器使得属性或方法不可�?
1 2 3 4 5 6 7 8 9 10
import { readonly } from'core-decorators';
classMeal { @readonly entree = 'steak'; }
var dinner = newMeal(); dinner.entree = 'salmon'; // Cannot assign to read only property 'entree' of [object Object]
@deprecate
deprecate或deprecated装饰器在控制台显示一条警告,表示该方法将废除
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
import { deprecate } from'core-decorators';
classPerson { @deprecate facepalm() {}
@deprecate('功能废除�?) facepalmHard() {} } let person = new Person(); person.facepalm(); // DEPRECATION Person#facepalm: This function will be removed in future versions. person.facepalmHard(); // DEPRECATION Person#facepalmHard: 功能废除�?