前言
深入分析一下 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比较模糊,不如factory和builder明确。一般不建议用它来区分返回类型。
3. handler
- 常见语义:
handler多用于事件处理函数,表示“响应某个事件的处理函数”。- 典型场景是处理事件或回调函数,如
clickHandler、errorHandler。 - 它的使用更关注于“处理逻辑”而不是返回值类型。
- 适用场景:
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关键字一起使用,适合更接近类的语义,但不适合一般函数返回的情况。
总结
对比表
| 名称 | 典型用法 | 返回值类型 | 适用场景 | 结论 |
|---|---|---|---|---|
| factory | storeUser.factory() | 函数定义(需要再调用) | 延迟生成实例,需要工厂函数动,态生成实例 | 返回函数定义 |
| creator | storeUser.creator() | 模糊(函数或实例) | 语义不明确,不推荐区分函数/实例 | 不建议区分用 |
| handler | storeUser.handler() | 处理函数/回调 | 事件处理逻辑 | 事件处理函数 |
| builder | storeUser.builder() | 直接返回对象实例 | 直接生成并返回实例 | 返回实例 |
| provider | storeUser.provider() | 函数定义(再调用生成) | 服务或对象的工厂方法 | 返回函数定义(更通用) |
| generator | storeUser.generator() | 函数定义(再调用生成) | 生成对象或数据 | 返回函数定义 |
| instance | storeUser.instance() | 对象实例 | 直接返回单例或实例 | 返回实例(更直观) |
| constructor | storeUser.constructor() | 函数定义(用于类实例) | 类的构造函数(结合 new) | 类构造函数(不常用) |
推荐用法
-
如果返回的是函数定义(需要调用后返回实例):
factory或generator或provider
// 如果希望表示返回的是函数定义,再调用生成实例 const createUser = storeUser.factory(); // 返回工厂函数 或者 storeUser.generator(); const user = createUser(); // 调用工厂函数生成实例 -
如果直接返回一个对象实例
builder或instance
// 如果希望表示直接返回实例 const userInstance = storeUser.builder(); // 直接返回实例 或者 storeUser.instance(); const { test, getId, isAble } = userInstance; // 可以直接使用 -
handler只适合事件处理场景,不适合用来区分实例和函数定义。 -
creator语义不够明确,建议避免在需要严格区分实例与函数定义时使用。

2395

被折叠的 条评论
为什么被折叠?



