java - 设计: Emailing System in Java

标签 java design-patterns email decorator

我正在为我正在开发的框架构建一个电子邮件系统。到目前为止,我已经有了一个通用的 MailMessage 接口(interface),每种不同类型的电子邮件都会实现该接口(interface),类似于

public interface MailMessage {
    public String[] getTo();
    public void setTo(String[] to);
    public String getFrom();
    public void setFrom(String from);
    ...
    // you can guess the setters/getters here
    ...
}

然后我得到了一个 SimpleMailMessage,它正是您所期望的接口(interface)的简单实现(没有加密或编码,只是纯文本)。

我创建了一个用作抽象工厂的 MailMessageFactory 接口(interface)。我有一个 SimpleMailMessageFactory,它实现工厂来生成 SimpleMailMessage 的实例。

我希望框架发送的一种类型的电子邮件是警报邮件消息,它本质上是常规邮件消息,除了主题行前面带有“[Alert]”前缀(另一种可能是包含“订单项目的列表”,但我不确定将列表转换为电子邮件字符串的责任在哪里)。我可以继承 SimpleMailMessage 并将 setSubject(String subject) 方法重写为类似

public class AlertMailMessage {
    ...
    public void setSuject(String subject) {
        this.to = "[Alert]" + to;
    }
    ...
}

或者我可以创建一个装饰器:

public abstract class EmailDecorator implements MailMessage {
    protected MailMessage email;
    ...
    // delegate all implemented methods to email
    ...
}

public class AlertEmailDecorator extends EmailDecorator {
    public void setSubject(String subject) {
        email.setSubject("[Alert]" + subject);
    }
}

或者我可以委托(delegate)在 SimpleMailMessageFactory 中添加“[Alert]”字符串。

对我有什么想法?我认为问题在于我可能过于深思熟虑和前瞻性,但我想要完美的设计。

最佳答案

装饰器对我来说似乎是更好的选择。我正在考虑,您可能还需要在主题行后附加 Fwd:Re:,或者您可能需要支持签名在电子邮件正文中添加签名。

关于java - 设计: Emailing System in Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/896093/

相关文章:

php - 使用 Swiftmailer 从 gmail 发送电子邮件

java - 有什么办法可以转换这些不可转换的类型吗?

用于简单静态数据的 C++ 架构

python - 电子邮件主题中的编码如何工作? ( Django / python )

Javascript 贪心算法带来改变

java - 避免在使用层次结构参数的操作中进行静态绑定(bind)

windows - 使用凭据从 powershell 命令行发送电子邮件

java - emacs的java怎么了?

java - 仅当从某个类调用该方法时才拦截该方法?

java - 如何在 Java 中将毫秒转换为 "X mins, x seconds"?