【发布时间】:2009-05-22 01:58:42
【问题描述】:
我正在为我正在开发的框架构建一个电子邮件系统。到目前为止,我已经有了一个通用的 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]”字符串。
对我有什么想法?我认为问题在于我可能过于周到和前瞻性,但我想要完美的设计。
【问题讨论】:
标签: java design-patterns email decorator