观察者模式(发布-订阅)
可以看出来,观察者模式,是一种一对多的关系,即多个观察者监听一个主题。
?
二、示例代码
商品价格打折后,所有关注、收藏该商品的用户都收到相关的信息提醒。
角色:
1)商品:被观察者;
2)用户:观察者
?
1.商品(发布者)
public class client {/** * @param args */public static void main(String[] args) {//产品Product mobile = new Product();mobile.setName("SAMSUNG手机");mobile.setPrice(2000);Product book = new Product();book.setName("JAVA设计模式");book.setPrice(80);//用户User user1 = new User();user1.setName("张三");user1.getFocusPdts().add(mobile);//关注某一款三星手机//user1.getFocusPdts().add(book);//关注JAVA设计模式User user2 = new User();user2.setName("李四");user2.getFocusPdts().add(mobile);//关注某一款三星手机user2.getFocusPdts().add(book);//关注JAVA设计模式//建立商品和订阅者关联mobile.getFocusUsers().add(user1);book.getFocusUsers().add(user1);book.getFocusUsers().add(user2);//产品打折,发送站内信提醒mobile.payOff(0.1);book.payOff(0.2);}}?
三、设计分析
常用的处理方式:
将数据库作为数据存储的介质,消息提醒数据保存在数据库表中,采用定时任务的方式来汇总和发送。具体流程:
1.存储用户-关注关联数据
将用户和所关注的数据存储到一张“用户-关注商品关联表”;
?
2.执行汇总任务
商品打折时,触发汇总任务,遍历“用户-关注商品“关联表,将符合发送条件的记录汇总到”提醒消息表“;
?
3.发送折扣提醒消息
遍历”提醒消息表“并发送,发送完成后,将记录标示为已发送。
?
四、分析设计
如果系统的用户、商品数量都很大,这种情况下如何设计功能更合理呢,个人认为有几点需要关注:
1)响应及时性
2)数据的持久性
3)web层压力
4)数据库层压力
5)系统资源的消耗
?
?
?