咱們在業務處理過程當中,常常要處理各類信息,好比:站內信息、郵件信息、還可能有短信、彩信,甚至可能與各類IM軟件進行對立的信息系統。 java
Tiny框架也須要面對這個問題,不同的是我以爲這幾種類型的信息處理模式都是同樣的,所以試圖採用統一的模式進行處理。 git
在開始以前,咱們先梳理一下需求: 框架
所以,咱們就抽象了下面的幾個概念: spa
固然,上面的概念的創建不是爲了看看的,是要在咱們的信息框架中參與的,固然它們中的一些就有一些行爲,下面咱們就分析一下這些概念的行爲有哪些: .net
下面一個一個來分析一下: 設計
在底層,只有MessageManager是有實現類的,即MessageManagerDefault,這也正常,因爲其它的都不肯定,因此就無法實現了。 code
到時爲此,信息處理的底層抽象與設計就算完成了。 接口
到了收發郵件,由於已是具體問題,所以上次留給子孫解決的問題,均可以解決了。 事件
因爲javax.email只是其中的一種可選方案,所以,在這裏沒有直接暴露任何與javax.email相關的接口,這樣就更方便針對不一樣郵件API進行實現。 內存
值得一提的是這裏引入了一個新的接口:
EmailMessageFlagMarker:用來在收郵件時對郵件的狀態進行不一樣的標示,這是由於不能簡單的把收到到的郵件標示成刪除或已讀,可能要根據許多種狀況進行判斷。
public static void main(String[] args) throws MessageException { MessageManager<EmailMessageAccount, EmailMessageSender, EmailMessageReceiver, EmailReceiveMessage> messageManager = new MessageManagerDefault(); EmailMessageAccount account = new EmailMessageAccount(); account.setHost("127.0.0.1"); account.setUsername("luoguo@tinygroup.org"); account.setPassword("123456"); messageManager.setMessageAccount(account); EmailMessageReceiveService messageReceiveService = new EmailMessageReceiveService(); MessageReceiveService receiveService=messageReceiveService; MessageSendService messageSendService = new EmailMessageSendService(); messageManager.setMessageReceiveService(receiveService); messageManager.setMessageSendService(messageSendService); messageReceiveService.setEmailMessageFlagMarker(new RemoveAllEmailMessageFlagMarker()); Collection<EmailReceiveMessage> messages = messageManager.getMessages(); for (EmailReceiveMessage message : messages) { System.out.println("subject:" + message.getMessage().getSubject()); System.out.println("content:" + message.getMessage().getContent()); System.out.println("附件:" + message.getMessage().getAccessories().size()); System.out.println("============================================="); } }
public static void main(String[] args) throws IOException, MessageException { MessageManager<EmailMessageAccount, EmailMessageSender, EmailMessageReceiver, EmailMessage> messageManager = new MessageManagerDefault(); EmailMessageAccount account = new EmailMessageAccount(); account.setHost("127.0.0.1"); account.setUsername("luoguo@tinygroup.org"); account.setPassword("123456"); EmailMessageSendService sendService = new EmailMessageSendService(); EmailMessageSender messageSender = new EmailMessageSender(); messageSender.setDisplayName("羅果"); messageSender.setEmail("luoguo@tinygroup.org"); EmailMessageReceiver messageReceiver = new EmailMessageReceiver(); messageReceiver.setDisplayName("羅果"); messageReceiver.setEmail("luog@tinygroup.org"); EmailMessage emailMessage = new EmailMessage(); emailMessage.setSubject("test1111111"); emailMessage.setContent("中華人民共和國"); EmailAccessory accessory = new EmailAccessory(new File("D:/RUNNING.txt")); emailMessage.getAccessories().add(accessory); messageManager.setMessageAccount(account); MessageReceiveService messageReceiveService = new EmailMessageReceiveService(); MessageSendService messageSendService = new EmailMessageSendService(); messageManager.setMessageReceiveService(messageReceiveService); messageManager.setMessageSendService(messageSendService); Collection<EmailMessageReceiver> receivers = new ArrayList<EmailMessageReceiver>(); receivers.add(messageReceiver); messageManager.sendMessage(messageSender, receivers, emailMessage); }上面看起來比較複雜,實際是都是在構建Bean,若是是把Bean配在IOC容器中,就會很是簡單了。
經過對各類信息的接收與發送進行分析,對信息處理進行了上層抽象,並簡單的進行實現就能夠實現各類信息的收發處理。
因爲對各類信息處理都採用了統一的接口,在須要進行各類信息都要進行接收或發送的時候,開發人員就會很是方便。
全部的源碼均可以在:http://git.oschina.net/tinyframework/tiny/tree/master/framework/org.tinygroup.message找到,感興趣的童鞋能夠前去查閱。