我正在为我正在开发的框架构建一个电子邮件系统。到目前为止,我已经有了一个通用的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]”字符串。
关于我拥有什么的想法?我认为问题在于我可能过于思考和前瞻性,但我想要完美的设计。
答案 0 :(得分:1)
装饰者似乎是更好的选择。但是,为什么要为Java编写自己的电子邮件框架?为什么不直接使用JavaMail API?
答案 1 :(得分:1)
装饰师似乎对我来说是一个更好的选择。我想,您可能需要在Fwd:
或Re:
附加您的主题,或者您可能需要支持签名,您将在电子邮件正文中添加签名。
答案 2 :(得分:1)
听起来就像Spring对JavaMail的支持。不要重新发明轮子,使用现有的,经过验证的解决方案,并在此基础上进行构建。