java crud事件回调_java回调机制 - 神是到着念的个人空间 - OSCHINA - 中文开源技术交流社区...
軟件模塊之間總是存在著一定的接口,從調(diào)用方式上,可以把他們分為三類:同步調(diào)用、回調(diào)和異步調(diào)用。同步調(diào)用是一種阻塞式調(diào)用,調(diào)用方要等待對(duì)方執(zhí)行完畢才返回,它是一種單向調(diào)用;回調(diào)是一種雙向調(diào)用模式,也就是說(shuō),被調(diào)用方在接口被調(diào)用時(shí)也會(huì)調(diào)用對(duì)方的接口;異步調(diào)用是一種類似消息或事件的機(jī)制,不過(guò)它的調(diào)用方向剛好相反,接口的服務(wù)在收到某種訊息或發(fā)生某種事件時(shí),會(huì)主動(dòng)通知客戶方(即調(diào)用客戶方的接口)。回調(diào)和異步調(diào)用的關(guān)系非常緊密,通常我們使用回調(diào)來(lái)實(shí)現(xiàn)異步消息的注冊(cè),通過(guò)異步調(diào)用來(lái)實(shí)現(xiàn)消息的通知。同步調(diào)用是三者當(dāng)中最簡(jiǎn)單的,而回調(diào)又常常是異步調(diào)用的基礎(chǔ)
回調(diào)你可以這樣來(lái)理解:
A發(fā)送消息給B,B處理好A要求的事情后,將結(jié)果返回給A,A再對(duì)B返回的結(jié)果來(lái)做進(jìn)一步的處理。
A、回調(diào)的實(shí)現(xiàn)
/**
*?回調(diào)接口
*?@author?KOOK
*
*/
public?interface?CallBack?{
/**
*?執(zhí)行回調(diào)方法
*?@param?objects將處理后的結(jié)果作為參數(shù)返回給回調(diào)方法
*/
public?void?execute(Object...?objects?);
}
B、消息的發(fā)送者
/**
*?簡(jiǎn)單本地發(fā)送異步消息的類
*?@author?KOOK
*
*/
public?class?Local?implements?CallBack,Runnable{
/**
*?遠(yuǎn)程接收消息的類,模擬point-to-point
*/
private?Remote?remote;
/**
*?發(fā)送出去的消息
*/
private?String?message;
public?Local(Remote?remote,?String?message)?{
super();
this.remote?=?remote;
this.message?=?message;
}
/**
*?發(fā)送消息
*/
public?void?sendMessage()
{
/**當(dāng)前線程的名稱**/
System.out.println(Thread.currentThread().getName());
/**創(chuàng)建一個(gè)新的線程發(fā)送消息**/
Thread?thread?=?new?Thread(this);
thread.start();
/**當(dāng)前線程繼續(xù)執(zhí)行**/
System.out.println("Message?has?been?sent?by?Local~!");
}
/**
*?發(fā)送消息后的回調(diào)函數(shù)
*/
public?void?execute(Object...?objects?)?{
/**打印返回的消息**/
System.out.println(objects[0]);
/**打印發(fā)送消息的線程名稱**/
System.out.println(Thread.currentThread().getName());
/**中斷發(fā)送消息的線程**/
Thread.interrupted();
}
public?static?void?main(String[]?args)
{
Local?local?=?new?Local(new?Remote(),"Hello");
local.sendMessage();
}
public?void?run()?{
remote.executeMessage(message,?this);
}
}
C、遠(yuǎn)程消息的接收者
/**
*?這個(gè)類相當(dāng)于你的同學(xué)
*/
public?class?Remote?{
/**
*?處理消息
*?@param?msg???接收的消息
*?@param?callBack??回調(diào)函數(shù)處理類
*/
public?void?executeMessage(String?msg,CallBack?callBack)
{
/**模擬遠(yuǎn)程類正在處理其他事情,可能需要花費(fèi)許多時(shí)間**/
for(int?i=0;i<1000000000;i++)
{
}
/**處理完其他事情,現(xiàn)在來(lái)處理消息**/
System.out.println(msg);
System.out.println("I?hava?executed?the?message?by?Local");
/**執(zhí)行回調(diào)**/
callBack.execute(new?String[]{"Nice?to?meet?you~!"});??//這相當(dāng)于同學(xué)執(zhí)行完之后打電話給你
}
}
回調(diào)的好處之一:摒棄了繼承抽象類方式的回調(diào)方式更加簡(jiǎn)便靈活
public?abstract?class?B{
public?void?execute(){
getConnection();
doCRUD();
releaseConnection();
}
public?abstract?void?doCRUD();
public?void?getConnection(){
System.out.println("獲得連接...");
}
public?void?releaseConnection(){
System.out.println("釋放連接...");
}
}
public?class?A?extends?B{
public?void?doCRUD(){
System.out.println("執(zhí)行add操作...");
}
public?void?add(){
doCRUD();
}
}
public?class?C?extends?B{
public?void?doCRUD(){
System.out.println("執(zhí)行delete操作...");
}
public?void?delete(){
doCRUD();
}
}
如果改為回調(diào)實(shí)現(xiàn)是這樣的
interface?CallBack{
public?void?doCRUD();
}
public?class?HibernateTemplate?{
public?void?execute(CallBack?action){
getConnection();
action.doCRUD();
releaseConnection();
}
public?void?add(){
execute(new?CallBack(){
public?void?doCRUD(){
System.out.println("執(zhí)行add操作...");
}
});
}
public?void?delete(){
execute(new?CallBack(){
public?void?doCRUD(){
System.out.println("執(zhí)行delete操作...");
}
});
}
public?void?getConnection(){
System.out.println("獲得連接...");
}
public?void?releaseConnection(){
System.out.println("釋放連接...");
}
}
總結(jié)
以上是生活随笔為你收集整理的java crud事件回调_java回调机制 - 神是到着念的个人空间 - OSCHINA - 中文开源技术交流社区...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: linux 查看java cpu_Lin
- 下一篇: java的if里有多个if_代码里写很多