factory、creator、handler、builder、provider、generator、instance、constructor之间在返回实例或返回函数定义上有什么区别

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

前言

深入分析一下 factory、creator、handler、builder、provider、generator、instance、constructor 这些单词在编程领域的惯用语义及其适用场景,特别是在区分实例函数定义方面的区别。

比如

const defFunc = storeUser.xxx();
const{ test, getId, isAble } = defFunc();


const instance = storeUser.yyy()
const {test, getId, isAble } = instance;

本文就是想确定二个单词,一看到就知道:

  • xxx返回的是函数定义,还要实例化才能使用;
  • yyy返回的是实例,直接可用。

无聊不无聊?

在这里插入图片描述

分析

1. factory

  • 常见语义
    • factory 通常指 工厂函数,用于动态创建和返回对象实例。
    • 在多数情况下,factory() 返回的是一个函数定义,调用这个函数定义会生成一个新的实例。这种模式常用于需要延迟初始化或动态创建对象的场景。
  • 适用场景
    const createUser = storeUser.factory(); // 返回工厂函数
    const user = createUser(); // 调用工厂函数生成实例
    
    • 适合用在需要进一步调用才能生成实例的情况。
  • 结论
    • factory 适合返回函数定义,这意味着需要再调用一次才能得到最终的对象实例。

2. creator

  • 常见语义
    • creator 一般表示 创建器函数,但在实际编程中它的语义比 factory 更宽泛。
    • 它既可以表示 返回一个新对象的函数,也可以直接表示返回的对象实例。因此,它的语义可能会让开发者感到不够明确。
  • 适用场景
    const userCreator = storeUser.creator(); // 可以是函数定义或直接返回实例
    const user = userCreator(); // 也可能直接用作实例
    
    • 因为 creator 本身语义较为模糊,因此不推荐在区分函数定义实例时使用它。
  • 结论
    • creator 比较模糊,不如 factorybuilder 明确。一般不建议用它来区分返回类型。

3. handler

  • 常见语义
    • handler 多用于事件处理函数,表示“响应某个事件的处理函数”。
    • 典型场景是处理事件回调函数,如 clickHandlererrorHandler
    • 它的使用更关注于“处理逻辑”而不是返回值类型。
  • 适用场景
    const eventHandler = storeUser.handler(); // 通常理解为一个回调函数
    eventHandler(); // 执行处理逻辑
    
    • 适合用于表示 事件处理函数,而不是用来区分实例和函数定义。
  • 结论
    • handler 更适合表示事件或任务的处理函数,并不适合用于表示返回实例或函数定义。

4. builder

  • 常见语义
    • builder 通常指 构建器模式,用于构建复杂对象。
    • 在现代用法中,builder 直接返回一个已构建的对象实例。这种命名约定让开发者期待它返回的是一个完整的实例而不是函数定义。
  • 适用场景
    const userInstance = storeUser.builder(); // 直接返回实例
    const { test, getId } = userInstance; // 可以直接解构使用
    
    • 适合用在 直接返回对象实例 的情况。
  • 结论
    • builder 适合直接返回实例,无需额外调用。

5. provider

  • 常见语义
    • 通常用于返回一个提供特定功能的函数或服务实例。
    • 适用场景
      const userProvider = storeUser.provider(); // 返回函数定义
      const user = userProvider(); // 需要调用生成实例
      
    • 结论
      • 可以用来表示返回函数定义,需要调用后获得实例。类似 factory 但更偏向于“提供服务”。

6. generator

  • 常见语义
    • 通常指生成某些东西的函数,可以是对象、数据等。
    • 适用场景
      const userGenerator = storeUser.generator(); // 返回函数定义
      const user = userGenerator(); // 调用后生成实例
      
    • 结论
      • generator 可以表示返回函数定义,适合用在需要调用一次生成实例的情况。语义上和 factory 类似,但更强调“生成”的动作。

7. instance

  • 常见语义
    • 直接表示返回的对象是一个已创建的实例。
    • 适用场景
      const userInstance = storeUser.instance(); // 直接返回实例
      const { test, getId } = userInstance;
      
    • 结论
      • 非常明确地表达返回的是对象实例,适合用在无需再调用的情况下。

8. constructor

  • 常见语义
    • 通常表示一个类或构造函数,但在函数式编程中可以用作返回构造函数。
    • 适用场景
      const UserConstructor = storeUser.constructor(); // 返回函数定义
      const user = new UserConstructor(); // 用于实例化
      
    • 结论
      • constructor 通常与 new 关键字一起使用,适合更接近类的语义,但不适合一般函数返回的情况。

总结

对比表

名称典型用法返回值类型适用场景结论
factorystoreUser.factory()函数定义(需要再调用)延迟生成实例,需要工厂函数动,态生成实例返回函数定义
creatorstoreUser.creator()模糊(函数或实例)语义不明确,不推荐区分函数/实例不建议区分用
handlerstoreUser.handler()处理函数/回调事件处理逻辑事件处理函数
builderstoreUser.builder()直接返回对象实例直接生成并返回实例返回实例
providerstoreUser.provider()函数定义(再调用生成)服务或对象的工厂方法返回函数定义(更通用)
generatorstoreUser.generator()函数定义(再调用生成)生成对象或数据返回函数定义
instancestoreUser.instance()对象实例直接返回单例或实例返回实例(更直观)
constructorstoreUser.constructor()函数定义(用于类实例)类的构造函数(结合 new类构造函数(不常用)

推荐用法

  • 如果返回的是函数定义(需要调用后返回实例)

    • factorygeneratorprovider
    // 如果希望表示返回的是函数定义,再调用生成实例
    const createUser = storeUser.factory(); // 返回工厂函数 或者 storeUser.generator();
    const user = createUser(); // 调用工厂函数生成实例
    
  • 如果直接返回一个对象实例

    • builderinstance
    // 如果希望表示直接返回实例
    const userInstance = storeUser.builder(); // 直接返回实例 或者 storeUser.instance();
    const { test, getId, isAble } = userInstance; // 可以直接使用
    
  • handler 只适合事件处理场景,不适合用来区分实例和函数定义。

  • creator 语义不够明确,建议避免在需要严格区分实例与函数定义时使用。

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值