我正在为我正在开发的框架构建一个电子邮件系统。到目前为止,我已经有了一个通用的 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/