2009-05-22 104 views
0

我正在爲我正在開發的框架構建電子郵件系統。到目前爲止,我有一個通用的接口MAILMESSAGE,每一個不同類型的郵件信息將實行,一些沿設計:Java中的電子郵件系統

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(字符串主題)方法類似

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中的字符串。

關於我有什麼想法?我認爲問題在於我可能過於考慮周到,有前瞻性,但我想要完美的設計。

回答

1

裝飾者似乎是更好的選擇給我。我正在考慮,可能您需要在Fwd:Re:之後追加您的主題行,或者您可能需要支持簽名,以便在郵件正文中添加簽名。

1

裝飾者似乎是更好的選擇。然而,你爲什麼要編寫自己的Java電子郵件框架?爲什麼不使用JavaMail API?

+0

JavaMail API將如何幫助我們裝飾我們的消息。我知道我已經將它與Freemarker模板一起使用,以格式化電子郵件。我認爲這個問題就是這個問題。此外,我相信最初的海報會使用相同的JavaMail API。沒有負面演員,順便說一句。 – 2009-05-22 04:43:14

1

聽起來就像Spring對JavaMail的支持一樣。不要重新發明輪子,使用已有的,經過驗證的解決方案,並在此基礎上進行構建。

+0

@Chochos你是對的,但就我而言,我需要提供不同的電子郵件服務提供者,而Spring僅受限於javamail支持的內容。 – djunforgetable 2009-05-23 13:48:08