设计:Java中的电子邮件系统

时间:2009-05-22 01:58:42

标签: java design-patterns email decorator

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

一样。
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,这正是你所期望的接口的简单实现(没有加密或编码,只是纯文本)。

我创建了一个用作抽象工厂的MailMessageFactory接口。我有一个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);
    }
}

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

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

3 个答案:

答案 0 :(得分:1)

听起来就像Spring对JavaMail的支持。不要重新发明轮子,使用现有的,经过验证的解决方案,并在此基础上进行构建。

答案 1 :(得分:1)

装饰者似乎是更好的选择。但是,为什么要为Java编写自己的电子邮件框架?为什么不直接使用JavaMail API?

答案 2 :(得分:1)

装饰师似乎对我来说是一个更好的选择。我想,您可能需要在Fwd:Re:附加您的主题,或者您可能需要支持签名,您将在电子邮件正文中添加签名。