介绍
- 将new操作单独封装
- 遇到new时,就要考虑是否该使用工厂模式
示例
- 你去购买汉堡,直接点餐、取餐,不会自己亲手做
- 商店要“封装”做汉堡的工作,做好直接给买者
简化后的UML类图

工厂模式-UML类图.jpg
工厂模式常见使用场景
- jQuery的函数$(),内部创建了新对象
- React.createElement
- vue异步组件
举例
jQuery
-
('div')有何区别?
- 第一:书写麻烦,jQuery的链式操作将成为噩梦
- 第二:一旦类名jQuery发生变化,将是灾难性的
代码
class Product {
constructor(name) {
this.name = name;
}
init() {
alert('init');
}
fun1() {
alert('fun1');
}
fun2() {
alert('fun2');
}
}
class Creator {
create(name) {
return new Product(name);
}
}
// 测试
let creator = new Creator();
let p = creator.create('p1');
p.init();
p.fun1();
个人总结
工厂模式主要用在需要频繁创建新对象的时候,以及多处需要创建新对象的时候。使用工厂模式可以避免类名改动造成需要大量修改代码的情况。