请告知以下架构解决方案的优缺点
NotificationSender,序列化并发送一般NotificationMessage
class NotificationSender {
public void send(NotificationMessage message) {
client.send(serializeToJson(message));
}
}
class NotificationMessage<E> {
E payload;
NotificationType type;
public NotificationMessage(payload, type) {
this.payload = payload;
this.type = type;
}
}
Enum NotificationType {
session, invite, etc, 100 more types...
}
NotificationSender.send(
new NotificationMessage<SessionDTO>(sessionDTO, NotificationType.session)
);
NotificationSender 为每种类型(SessionNotificationMessages 等)序列化并发送不同的NotificationMessage
class NotificationSender {
public void send(NotificationMessage message) {
client.send(serializeToJson(message));
}
}
abstract class NotificationMessage<E> {
E payload;
}
class SessionNotificationMessage extends NotificationMessage {
static final String = "session";
public NotificationMessage(payload) {
this.payload = payload;
}
}
class InviteNotificationMessage extends NotificationMessage {
static final String = "invite";
public NotificationMessage(payload) {
this.payload = payload;
}
}
NotificationSender.send(new SessionNotificationMessage(sessionDTO));
NotificationSender.send(new InviteNotificationMessage(inviteDTO));
谢谢
最佳答案
使用枚举。不要创建 100 个子类,除非它们具有不同的行为(即,它们重写方法)。
具有许多常量的枚举在内存和执行方面非常便宜。拥有这么多的类并不便宜,而且肯定会让其他人更难使用该 API。
枚举是一个有限值集:任何具有枚举类型的变量都保证包含枚举常量之一(或 null)。
如果类是最终类并且/或构造函数保持包私有(private),则可以使用子类完成同样的事情,但即便如此,API 的用户也永远无法完全确定哪些值是有效的,因为由于类的动态加载方式,无法绝对确定地列出类的所有后代。
关于java - 优点和缺点 : having Enum or Class for Message Notification types,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47486828/