bricks/aidocs/factory.md
2025-10-05 06:39:58 +08:00

4.1 KiB
Raw Permalink Blame History

Bricks 工厂模式技术文档

概述

bricks.Factory 是一个基于单例模式的工厂类,用于注册和获取组件(或“小部件”)对象。它提供了一个全局可访问的注册表,允许动态地注册命名的组件类或对象,并通过名称进行检索。

该实现是 Bricks 前端框架/库的一部分,旨在统一管理可复用的 UI 组件或其他功能模块。


代码结构

var bricks = window.bricks || {};
class Factory_ {
    constructor() {
        this.widgets_kv = new Object();
        this.widgets_kv['_t_'] = 1;
    }

    register(name, widget) {
        this.widgets_kv[name] = widget;
    }

    get(name) {
        if (this.widgets_kv.hasOwnProperty(name)) {
            return this.widgets_kv[name];
        }
        return null;
    }
}
bricks.Factory = new Factory_();

核心类:Factory_

构造函数 constructor()

初始化一个空的对象 widgets_kv,用于存储注册的组件。

初始化内容:

  • this.widgets_kv = new Object()
    创建一个普通对象作为键值对存储容器。
  • this.widgets_kv['_t_'] = 1
    预留字段,可能用于调试、版本标识或检测对象是否已被初始化(用途未明确,但不影响主流程)。

⚠️ 注意:使用 new Object() 而非 {} 仅为风格选择,功能一致。


方法说明

register(name: string, widget: any): void

将指定名称与组件(类、函数或对象)注册到工厂中。

参数:
参数名 类型 描述
name string 注册的唯一名称(键),用于后续查找
widget any 要注册的组件,通常为类构造函数或配置对象
行为:
  • 直接赋值:this.widgets_kv[name] = widget
  • 若名称已存在,则覆盖旧值
示例:
class MyWidget { /* ... */ }
bricks.Factory.register('my-widget', MyWidget);

get(name: string): any | null

根据名称从工厂中获取已注册的组件。

参数:
参数名 类型 描述
name string 要查询的组件名称
返回值:
  • 如果存在该名称的组件,返回对应值;
  • 否则返回 null

使用 hasOwnProperty 检查避免原型链污染风险。

示例:
const WidgetClass = bricks.Factory.get('my-widget');
if (WidgetClass) {
    const instance = new WidgetClass();
}

全局实例:bricks.Factory

通过以下语句暴露为全局单例:

bricks.Factory = new Factory_();

确保在整个应用中只有一个 Factory 实例,所有模块共享同一注册表。

利用 window.bricks || {} 确保命名空间安全,防止覆盖已有变量。


设计模式

  • 单例模式Singleton Pattern
    Factory_ 类仅被实例化一次,全局共享状态。

  • 工厂模式Factory Pattern
    提供统一接口来创建对象,解耦对象的使用与创建过程。


使用场景

适用于需要动态加载或按需获取组件的系统,例如:

  • UI 组件库注册与调用
  • 插件系统
  • 模块化前端架构中的依赖查找

注意事项

  1. 名称冲突
    register 不检查重名,后注册者会覆盖前者,请确保命名唯一性。

  2. 安全性
    当前未对输入参数做类型校验,建议在生产环境中添加防御性编程措施。

  3. 性能
    使用普通对象作为 map在现代 JS 引擎中对于中等规模键集表现良好。若需大规模注册,可考虑改用 Map

  4. 扩展建议

    • 可增加 unregister(name) 方法以支持注销组件
    • 可增加 list() 方法返回所有注册项列表用于调试

版本信息

  • 创建时间:未知(根据代码推断为早期 JS 模块化方案)
  • 兼容性:支持 ES6+ 环境,可在浏览器中直接运行

总结

bricks.Factory 是一个轻量级、高效的组件注册与获取机制,适用于构建模块化、可扩展的前端系统。其简洁的设计使其易于理解和集成,是 Bricks 框架基础设施的重要组成部分。