插槽模式,簡(jiǎn)而言之就是在即將開發(fā)的業(yè)務(wù)方法流程的某一個(gè)位置埋下一個(gè)點(diǎn),未來可以在該位置去添加功能,在該位置添加的功能可以根據(jù)需要证杭,隨時(shí)可以去除去這個(gè)功能。
該模式和spring aop思想有相似的地方妒御,但是該模式可以具體的業(yè)務(wù)方法的某一個(gè)位置解愤,比較注重細(xì)節(jié)。
接下來乎莉,編寫相關(guān)demo
- ZNservice
/**
* 業(yè)務(wù)類
*/
public class ZNservice {
private PublicService publicService = new PublicService();
public boolean add() throws Exception{
//檢測(cè)數(shù)據(jù)
System.out.println("檢測(cè)數(shù)據(jù)");
// 埋點(diǎn)
System.out.println(publicService.registered("com.zn.demo.znstudy.ZNserviceImpl-empty"));
//組裝數(shù)據(jù)
System.out.println("組裝數(shù)據(jù)");
//插入數(shù)據(jù)庫
System.out.println("插入數(shù)據(jù)");
return true;
}
}
2.PublicService
public class PublicService {
// 注冊(cè)業(yè)務(wù)方法
public boolean registered(String str) throws Exception {
// 獲取類名與方法
String[] strList = str.split("-");
String className = strList[0];
String methodName = strList[1];
// 獲取類實(shí)例
Class<?> serviceClass = Class.forName(className);
Object instance = serviceClass.newInstance();
// 獲取類方法
Method method = serviceClass.getMethod(methodName, new Class[]{});
// 運(yùn)行方法
method.invoke(instance, new Class[]{});
return true;
}
}
3.ZNserviceImpl
public class ZNserviceImpl {
public void empty(User user){
System.out.println(user.getId());
System.out.println("數(shù)據(jù)檢測(cè)中");
}
public void fun(User user){
System.out.println(user.getId());
System.out.println("shu");
}
}
運(yùn)行結(jié)果: