設計模式應用之Observer模式(2)
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
* 來自www.itpub.net
* 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
* 來自www.itpub.net
* 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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 設計模式應用之Observer模式(1)設計模式Server
- 設計模式----Observer模式設計模式Server
- 設計模式應用之Template method模式設計模式
- Head First 設計模式(2)---觀察者(Observer)模式設計模式Server
- 設計模式:觀察者模式(observer)設計模式Server
- 看了設計模式之Observer設計模式Server
- 設計模式之觀察者模式(Observer Pattern)設計模式Server
- 人人都會設計模式—觀察者模式–Observer設計模式Server
- 人人都會設計模式---觀察者模式--Observer設計模式Server
- C#設計模式系列:觀察者模式(Observer)C#設計模式Server
- 應用Observer介面實踐Observer模式Server模式
- 設計模式-- 觀察者模式Observer(物件行為型)設計模式Server物件
- C#設計模式(17)——觀察者模式(Observer Pattern)C#設計模式Server
- Java23種設計模式【22】----》觀察者模式(Observer)Java設計模式Server
- 設計模式(三)觀察者模式Observer(釋出訂閱)設計模式Server
- 我工作的那點事--學習《設計模式》例項應用(Observer模式)設計模式Server
- Java:應用Observer介面實踐Observer模式薦JavaServer模式
- Banq:看了你的設計模式:Observer,有些疑問設計模式Server
- 設計模式 #2 (工廠模式)設計模式
- Yii2設計模式——設計模式簡介設計模式
- 前端設計模式(2)--單例模式前端設計模式單例
- javascript設計模式 之 2 策略模式JavaScript設計模式
- c#delegate委託與事件及observer設計模式C#事件Server設計模式
- Visitor模式和Observer觀察者模式模式Server
- PHP設計模式(2)—— 介面卡模式PHP設計模式
- Yii2設計模式——單例模式設計模式單例
- 《設計模式》 - 2. 工廠模式( Factory )設計模式
- observer-觀察者模式Server模式
- Observer模式的問題Server模式
- 設計模式 | 策略模式及典型應用設計模式
- 設計模式筆記(2)設計模式筆記
- EJB設計模式2 (轉)設計模式
- Yii2設計模式——工廠方法模式設計模式
- Yii2設計模式——註冊樹模式設計模式
- Java設計模式2:簡單工廠模式Java設計模式
- Angular應用架構設計-2:Data Service模式Angular應用架構模式
- 實現觀察者模式(Observer Pattern)的2種方式模式Server
- 設計模式 | 外觀模式及典型應用設計模式