优点和缺点:具有消息通知类型的枚举或类



请建议利弊,以遵循建筑解决方案

序列化并发送通用通知的通知

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)
 );

通知序列序列序列并为每种类型发送不同的NotificationMessage(SessionNotificationMessages等)

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个子类,除非它们具有独特的行为(也就是说,它们覆盖方法)。

在记忆和执行方面,具有许多常数的枚举非常便宜。拥有很多课并不便宜,肯定会使其他人更难使用。

枚举是一个有限的值集:保证具有枚举类型的任何变量包含枚举常数之一(或null)。

可能可以使用子类完成同一操作,如果类是最终和/或构造函数保留的构造函数,但是即使如此,API的用户也永远不会完全确定哪些值是有效的,因为由于类动态加载了类的方式,因此无法列出具有绝对确定性的类的所有后裔。

最新更新