博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式应用之Observer模式(2)
阅读量:2497 次
发布时间:2019-05-11

本文共 3519 字,大约阅读时间需要 11 分钟。

observer模式的应用(2)

ActionListener的实现类LogonListener在用户登陆和退出的时候更新相关的业务表单:

package test.pattern;
import org.apache.log4j.Logger;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.util.Map;

/**

* Description :
* Author : husthxd
* 来自
* Date: 2005-6-3
* Time: 12:18:53
* Version 1.0
*/
public class LogonListener implements ActionListener {
static Logger logger = Logger.getLogger(LogonListener.class);
int id = 0;
public LogonListener(int id) {
this.id = id;
}
public LogonListener() {
}

//登陆

public void login(User user) throws GFPortalException {
Connection conn = null;
try {
//数据库连接
conn = ConnMgr.getConnection();
conn.setAutoCommit(false);
//sql语句
StringBuffer sqlstmt = new StringBuffer();
//判断用户是否已经在表中
//构造sql语句
sqlstmt.append("select count(*) v_count from BUG_TEAM where USERID =");
sqlstmt.append(user.getUserId());
sqlstmt.append(" and INSTANCEID = ");
sqlstmt.append(id);
logger.debug("sql语句:" + sqlstmt);
//取得结果
Map map = BusinessLogicQueryHelper.factory().getRecord(conn, sqlstmt.toString());
int iCount = Integer.parseInt(map.get("v_count").toString());
if (iCount > 0) {
return;
}
//执行sql语句
sqlstmt.append("insert into BUG_TEAM values (?,?,?,?)");
PreparedStatement stmt = conn.prepareStatement(sqlstmt.toString());
//设置参数
stmt.setInt(1, id);
stmt.setInt(2, user.getUserId());
stmt.setString(3, user.getUserName());
stmt.setString(4, "0");
//执行
stmt.execute();
conn.commit();
} catch (Exception e) {
try {
conn.rollback();
} catch (Exception e2) {
}
throw new GFPortalException("出错!" + e);
} finally {
ConnMgr.closeConnection(conn);
}
}

//退出

public void logout(User user) throws GFPortalException {
Connection conn = null;
try {
//数据库连接
conn = ConnMgr.getConnection();
conn.setAutoCommit(false);
StringBuffer sqlstmt = new StringBuffer();
//执行sql语句
sqlstmt.append("DELETE FROM BUG_TEAM WHERE USERID = ? AND INSTANCEID = ?");
sqlstmt.append(" and isnull(FLAG,'0') = '0'");
logger.debug("sql语句:" + sqlstmt);
PreparedStatement stmt = conn.prepareStatement(sqlstmt.toString());
stmt.setInt(1, user.getUserId());
stmt.setInt(2, id);
//执行
stmt.execute();
conn.commit();
} catch (Exception e) {
try {
conn.rollback();
} catch (Exception e2) {
}
throw new GFPortalException("出错!" + e);
} finally {
ConnMgr.closeConnection(conn);
}
}
}

Logon类扮演System角色,listener列表设为静态,全局共享:

package test.pattern;

import java.util.Iterator;

/**
* Description : 登陆/退出类
* Author : husthxd
* 来自
* Date: 2005-6-3
* Time: 12:10:31
* Version 1.0
*/
public class Logon {
//保存listener(各个正在进行审核小组讨论的流程)
static private java.util.List listeners = new java.util.ArrayList();
//注册
public static void register(ActionListener al) {
listeners.add(al);
}
//登陆通知
public static void loginNotify(User user) throws GFPortalException {
for (Iterator itor = listeners.iterator(); itor.hasNext();) {
ActionListener al = (ActionListener) itor.next();
al.login(user);
}
}
//退出通知
public static void logoutNotify(User user) throws GFPortalException {
for (Iterator itor = listeners.iterator(); itor.hasNext();) {
ActionListener al = (ActionListener) itor.next();
al.logout(user);
}
}
}
客户端调用:
在用户登陆的loginCheck.jsp页面中加入代码:
Logon.loginNotify(user);
在用户退出的logout.jsp页面中加入代码:
Logon.logoutNotify(loginUser);
在审核页面中加入代码(进入审核页面即视为进入审核状态):
//把当前登陆的用户加入到审核小组中
//doAddUser
//下面设置监听
ActionListener al = new LogonListener ();
Logon.register(al);
达到的效果是用户在登陆的时候自动在在审中的流程相关表中把登陆用户加入到审核小组中,在用户退出的时候如果用户还没有确认则把用户从审核小组中删除。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/6906/viewspace-21824/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/6906/viewspace-21824/

你可能感兴趣的文章
C#修改JPG图片EXIF信息中的GPS信息
查看>>
从零开始的Docker ELK+Filebeat 6.4.0日志管理
查看>>
How it works(1) winston3源码阅读(A)
查看>>
How it works(2) autocannon源码阅读(A)
查看>>
How it works(3) Tilestrata源码阅读(A)
查看>>
How it works(12) Tileserver-GL源码阅读(A) 服务的初始化
查看>>
uni-app 全局变量的几种实现方式
查看>>
echarts 为例讲解 uni-app 如何引用 npm 第三方库
查看>>
uni-app跨页面、跨组件通讯
查看>>
springmvc-helloworld(idea)
查看>>
JDK下载(百度网盘)
查看>>
idea用得溜,代码才能码得快
查看>>
一篇掌握python魔法方法详解
查看>>
数据结构和算法5-非线性-树
查看>>
数据结构和算法6-非线性-图
查看>>
数据结构和算法7-搜索
查看>>
数据结构和算法8-排序
查看>>
windows缺少dll解决办法
查看>>
JPA多条件动态查询
查看>>
JPA自定义sql
查看>>