一、这段代码详解
public class MemberSmsDto {
private String name;
private String phone;
// 静态工厂方法(推荐命名)
public static MemberSmsDto fromEntityStatic(Member member) {
MemberSmsDto dto = new MemberSmsDto();
dto.name = member.getName();
dto.phone = member.getPhone();
return dto;
}
}
说明:
-
fromEntityStatic(…) 是一个 静态方法。
-
传入一个 Member 实体对象,返回一个 MemberSmsDto 对象。
-
它隐藏了构造细节,对外只暴露一种清晰语义的构建方式(“从实体构建 DTO”)。
-
这是静态工厂方法的一种典型用法,用于 对象转换 / 封装映射。
二、对象构造模式有哪些?详细对比
在 Java 中,对象创建常见方式有:
1. 构造函数(Constructor)
User user = new User("Amy", 25);
✔ 简单直接,但构造器重载多时,容易混淆、阅读性差。
2. 静态工厂方法(Static Factory Method)
User user = User.of("Amy", 25);
// 或:User.fromJson(jsonObj)
✔ 命名清晰
✔ 可返回缓存、单例、接口实现
❌ 无法继承、无默认构造器反射支持
3. Builder 模式(构建者)
User user = User.builder()
.name("Amy")
.age(25)
.email("amy@example.com")
.build();
✔ 可读性强,适合参数多或可选参数
✔ 不依赖构造器顺序
❌ 写法略繁琐、类代码稍多
4. 工厂方法模式(Factory Method Pattern)
接口 + 多个实现类的构造分发
interface Notification {
void send();
}
class SmsNotification implements Notification { ... }
class EmailNotification implements Notification { ... }
class NotificationFactory {
public static Notification create(String type) {
switch(type) {
case "sms": return new SmsNotification();
case "email": return new EmailNotification();
default: throw new IllegalArgumentException("Unknown type");
}
}
}
5. 原型模式(Prototype)
User u2 = u1.clone();
✔ 拷贝已有对象的完整状态
❌ clone() 使用不当容易出现深/浅拷贝问题
6. 依赖注入(Spring 中最常用)
@Service
public class SmsService {
private final SmsSender sender;
@Autowired
public SmsService(SmsSender sender) {
this.sender = sender;
}
}
✔ 控制反转
✔ 配合工厂与生命周期管理