You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel项目中带make()方法的代码属于哪种OOP设计模式?

这种写法属于静态工厂模式(Static Factory Method)的变体

这是一种轻量化的实例创建模式,和GoF定义的工厂方法模式核心区别在于:它不需要额外的工厂类/继承体系,而是把对象创建逻辑直接封装在类自身内部。

核心特点

  • 通常会将类的构造函数设为protected或private,强制外部只能通过指定方法(比如make())获取实例
  • make()方法作为实例创建的统一入口,负责完成实例初始化、属性赋值等逻辑,返回配置完成的对象
  • 既可以是静态方法(最常见的形式),也可以像你例子里那样作为私有实例方法,用于在类内部创建新实例

适用场景

  • 隐藏复杂的实例初始化逻辑,对外提供简洁的创建入口,避免业务代码里出现零散的new操作和属性赋值
  • 确保对象属性的完整性,比如给readonly属性赋值、完成必要的初始化校验
  • 在类内部需要创建多个同类型实例的场景中(比如你例子里的process()方法),复用初始化逻辑
  • 在Laravel生态中非常常见,比如Eloquent模型的make()方法、命令类的实例创建都采用了类似思路

和工厂方法模式的区别

  • 工厂方法模式依赖继承体系,通过不同的工厂子类实现来创建不同的产品实例,属于“多态式创建”
  • 这种静态工厂模式是在类自身内部封装创建逻辑,不需要额外的工厂接口或子类,更轻量化、更聚焦于单个类的实例创建

结合你给出的代码来看:
make()作为私有方法封装了Foo实例的创建和$bar属性的赋值逻辑,在process()内部调用它来生成新实例,避免了直接在业务逻辑里写new self()并手动赋值的零散代码,保持了类内部逻辑的整洁性。

内容的提问来源于stack exchange,提问作者Angry Lamo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 19:55:13