假設有這麼乙個場景,學生們有個問題,需要去處理。有大多數情況下學生個人就能搞定這個通知,如果不行就讓班長幫忙。班長也無能無力的時候就可以去找到輔導員,最終解決學生的問題。這中間就形成了乙個職責鏈,當前級別無法處理問題時,就往上交付,知道解決為止。在程式中也可以通過責任鏈模式來把上述的場景展現出來。
uml圖:
具體的**實現如下:
/**
*代表職務或者是請求(問題)的等級
*/public
enum status
/**
* 抽象請求
*/public
abstract
class
abstractrequest
public string getcontent()
//獲得請求級別
public
abstract enum getrequeststatus();
}
/**
* 不同級別的請求
*/class
requesta
extends
abstractrequest
@override
public enum getrequeststatus()
}class
requestb
extends
abstractrequest
@override
public enum getrequeststatus()
}class
requestc
extends
abstractrequest
@override
public enum getrequeststatus()
}
/**
* 抽象處理者
*/public
abstract
class
abstracthandler else else }}
//setter
public
void
setnexthandler(abstracthandler nexthandler)
//獲取處理者等級
public
abstract enum gethandlestatus();
//處理請求,在子類實現
public
abstract
void
handle(abstractrequest request);
}
//輔導員
class
counselor
extends
abstracthandler
@override
public
void handle(abstractrequest request)
}//班長
class
monitor
extends
abstracthandler
@override
public
void handle(abstractrequest request)
}//學生
class
student
extends
abstracthandler
@override
public
void handle(abstractrequest request)
}
最後,可以通過傳送請求來測試:
public
class client
}
結果:
student 處理不了 請求1一旦請求能夠被責任鏈上的其中乙個部分處理,那接下來就不會再傳遞下去了。這就是責任鏈模式的乙個簡單的實現方式。monitor 處理不了 請求1
counselor 處理 請求1
student 處理不了 請求2
monitor 處理 請求2
student 處理 請求3
優點:可以將請求者與處理者的關係分離解耦,提高**的靈活性。
缺點:每次都需要遍歷責任鏈來找到合適的處理者,當責任鏈過長時,可能會影響程式的效能。
PB事務處理
1 資料視窗更新,只要dberror有錯誤,而事先沒有做過任何commit工作,那麼rollback可以回滾到上次commit位置,即上次commit後所有的資料將被回滾。2 如果是直接寫入sql語句,只要資料庫出現錯誤,那麼rollback可以回滾到上次commit的位置,即上次commit後所有...
MySQL事務處理
start transaction,commit和rollback語法 start transaction begin work commit work and no chain no release rollback work and no chain no release set autocom...
ASP事務處理
asp事務處理。測試資料庫為sql server,伺服器為本機,資料庫名為test,表名為a,兩個欄位id int 主鍵標識,num int set conn server.createobject adodb.connection strconn provider sqloledb.1 persi...