概述
观察者模式实用范围:一个事件触发了一系列的事件。如果将这一系列的事件写在一个方法里面显然不是一个最好的方式,最好的模式就是采用观察者模式,将各个事件分而治之。
// 一段伪代码展示常规写法,请不要在意业务逻辑
// 缺点就是代码高度耦合,将来一旦业务发生变更或者需要新增加一个事件都需要进行代码变更
@RequestMapping(value="/buy.do")
public void buy(HttpServletRequest request, HttpServletResponse response){
//用户购买成功
boolean bool=buy();
//发送邮件
sendEmail();
//发送短信
sendMsg();
}
以下是通过一个观察者设计模式进行代码变更:
- 建立一个事件触发对象,比如登录成功事件
- 建立一个消息传递通道,在spring中采用 applicationContext即可
- 建立一个监听机制,监听登录事件。
@Autowired
ApplicationContext applicationContext;
@RequestMapping(value="/loginHome.do")
public void getLoginHome(HttpServletRequest request, HttpServletResponse response,
@RequestParam Map<String, String> paramsMap){
ShiroUser user = (ShiroUser)SecurityUtils.getSubject().getPrincipal();
try {
List list=userService.getUserRightList("32");
applicationContext.publishEvent(new UserLoginEvent(user));
JsonUtil.returnListJson(list,response);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
import org.springframework.context.ApplicationEvent;
public class UserLoginEvent extends ApplicationEvent{
public UserLoginEvent(Object source) {
super(source);
// TODO Auto-generated constructor stub
}
/**
*
*/
private static final long serialVersionUID = 1L;
}
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Service;
import com.github.xupei.simple.shiro.ShiroUser;
@Service
public class EmailListener implements ApplicationListener<UserLoginEvent>{
@Override
public void onApplicationEvent(UserLoginEvent event) {
// TODO Auto-generated method stub
ShiroUser user =
(ShiroUser) event.getSource();
System.out.println(user.getLoginName()+"------------邮件");
}
}
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Service;
import com.github.xupei.simple.shiro.ShiroUser;
@Service
public class MsgListener implements ApplicationListener<UserLoginEvent>{
@Override
public void onApplicationEvent(UserLoginEvent event) {
// TODO Auto-generated method stub
ShiroUser user =
(ShiroUser) event.getSource();
System.out.println(user.getLoginName()+"------------短信");
}
}
最后
以上就是留胡子钢笔为你收集整理的观察者模式——在spring中的实现的全部内容,希望文章能够帮你解决观察者模式——在spring中的实现所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复