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
相关产品推荐
相关产品推荐

