• 将new操作单独封装
    • 遇到new的时候,就需要考虑是否该用到工厂模式
    1. class Product {
    2. constructor(name) {
    3. this.name = name
    4. }
    5. init() {}
    6. func1() {}
    7. func2() {}
    8. }
    9. class Creator {
    10. create(name) {
    11. return new Product()
    12. }
    13. }
    14. let creator = new Creator()
    15. let p = creator.create('p1') // 工厂方式实例化类
    16. p.init()
    17. p.func1()

    UML类图:

    点击查看【undefined】

    举例:

    • jQuery
    1. window.$ = function(selector) { // $就是一个工厂,返回实例化后的jQuery
    2. return new jQuery(selector)
    3. }
    • React.createElement()
    1. class Vnode(tag, props, children) {
    2. /* 省略部分代码 */
    3. }
    4. // jsx其实就是createElement的语法糖
    5. React.createElement = function(tag, props, children) {
    6. /* 省略部分代码 */
    7. return new Vnode(tag, props, children)
    8. }

    验证:

    • 构造函数和创建者是分离的
    • 符合开放封闭原则