观察者模式在个人网站邮件发布与订阅中的实践
生活随笔
收集整理的這篇文章主要介紹了
观察者模式在个人网站邮件发布与订阅中的实践
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
觀察者模式在個人網站郵件發布與訂閱中的實踐
4/28/2017 10:02:59 AM
最近在使用SSM框架開發自己個人的學習網站過程中使用到了設計模式中非常常見同時非常使用的觀察者模式。所謂設計模式最重要的并非他的具體邏輯,而在于他的設計動機和實現原理。觀察者模式的設計動機就是使得作為觀察者在主動接收到來自被觀察者的動作或消息時發生聯動變化,從而實現消息的有效傳遞。下面是具體的核心代碼:
郵件發布者(被觀察者)抽象,包含核心郵件訂閱者列表(EmailPublishObserver.java)
public abstract class EmailPublishObserver {public List<EmailReceiverImp> emailReceiverImps=new ArrayList<EmailReceiverImp>();//訂閱者列表public void addEmailReceiver(EmailReceiverImp emailReceiverImp){this.emailReceiverImps.add(emailReceiverImp);}public void deleteEmailReceiver(EmailReceiverImp emailReceiverImp){this.emailReceiverImps.remove(emailReceiverImp);}//訂閱列表更新的抽象方法public abstract void update(List<EmailReceiverImp> emailReceiverImps);//郵件發布抽象方法/*** @param filePath 所需發送郵件的路徑地址*/public abstract void publishEmail(String[] filePath,String emailContent);}
郵件發布實現(emailPublisher.java)
/*** 郵件廣播發布*/@Service("emailPublisher")public class EmailPublisher extends EmailPublishObserver{private List<EmailReceiverImp> emailReceiverImps;//關聯觀察者列表@Overridepublic void update(List<EmailReceiverImp> emailReceiverImps) {this.emailReceiverImps=emailReceiverImps;}@Overridepublic void publishEmail(String[] filePath,String emailContent) {for (EmailReceiverImp emailReceiverImp:emailReceiverImps){emailReceiverImp.setFilePath(filePath);emailReceiverImp.setEmailContent(emailContent);emailReceiverImp.subscribe();}}}
郵件訂閱者(觀察者)接口
/***Created by Administrator on 2017/3/23.*郵件訂閱接口*/public interface IEmailReceiver {void subscribe();}郵件訂閱者實現
public class EmailReceiverImp implements IEmailReceiver {
private Email email;private String[] filePath;private String emailContent;public String[] getFilePath() {return filePath;}public void setFilePath(String[] filePath) {this.filePath = filePath;}public String getEmailContent() {return emailContent;}public void setEmailContent(String emailContent) {this.emailContent = emailContent;}public Email getEmail() {return email;}public void setEmail(Email email) {this.email = email;}public EmailReceiverImp(){}public EmailReceiverImp(Email email){this.email=email;}//此方法作為郵件發布后自動接收郵件(廣播到所有訂閱者)@Overridepublic void subscribe() {BlogEmailSender emailSender=new BlogEmailSender(email);emailSender.setSendFileName(filePath);emailSender.setContent(emailContent);Thread sendThread=new Thread(emailSender);//創建郵件發送線程sendThread.start();//啟動線程}}
網站界面
相關個人博客項目已經在GitHub開源,歡迎交流完善 -> https://github.com/kingxiusam/EasyBlog
轉載于:https://www.cnblogs.com/ZengHuangDong/p/6781081.html
總結
以上是生活随笔為你收集整理的观察者模式在个人网站邮件发布与订阅中的实践的全部內容,希望文章能夠幫你解決所遇到的問題。