工厂模式

工厂模式

  • 将new操作单独封装
  • 遇到new时,就要考虑是否该使用工厂模式

类图

  • 传统UML类图(java)
classDiagram class IProduc{ <<interface>> +function() int } class Product_A{ +function() int } class Product_B{ +function() int } class Creator{ +factory() IProduct } Creator --> Product_A Creator --> Product_B Product_A ..|> IProduc Product_B ..|> IProduc
  • 简化后的UML类图
classDiagram class Creator{ +create(name) Product } class Product{ +name +init() +fn1() +fn2() } Creator --> Product
  • 代码示例
/**
 * 工厂模式
 */

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();
  • 场景

    • jQuery - $('div')
    • React.CreateElement
    • vue异步组件
  • 设计原则验证

    • 构造函数和创建者分离
    • 符合开放封闭原则
posted @ 2020-10-30 15:52  mrtransition  阅读(76)  评论(0)    收藏  举报