[英]Java template method pattern
我試圖在一些JavaEE bean中按照模板方法模式的方式實現一些功能,這些JavaEE bean對數據集進行一些處理工作。
每個處理Bean都使用Job對象,執行一些工作,然后返回下一個Bean的更新的作業(總共約10個),每個Bean都有一個具有相同名稱的單個方法(doProcessing)和單個參數(job)
我想在每個bean'doProcessing'方法的開始和結束處執行一些日志記錄,以便在處理作業結束時包含來自每個bean的日志記錄信息(存儲在哈希圖中,諸如此類)
我當前的實現看起來像這樣...
@Stateless
public class processingTaskOne(){
public void doProcessing(Job job){
//always called at beginning of method
String beanReport = "Info from Task 1: ";
for(int i=0; i<job.getDataArray().size();i++){
beanReport+="\n some more info";
//Do some processing work here
}
//always called at end of method
job.addNewReportSection(beanReport)
}
}
但是我知道我可以做得更好,使用繼承,我應該能夠按照以下方式創建超類:
public abstract class Reportable{
private String sectionReport;
public void preProcessing(Job job){
//Setup bean report, use reflection to get subclass name
}
public void postProcessing(Job job){
//Finish bean report and append to job
job.addNewReportSection(sectionReport)
}
public abstract doProcessing(){
//not sure how this should work
}
}
任何擴展超類的類都將自動執行預處理/后處理動作...
@Stateless
public class processingTaskOne() extends Reportable{
public void doProcessing(Job job){
for(int i=0; i<job.getDataArray().size();i++){
super.sectionReport += "log some info"
//Do some processing work here
}
}
}
但是由於所有示例都引用了POJO,並且由於我的bean是@Stateless,所以我無法弄清楚如何實現此功能,因此沒有構造函數。
有人可以提供一些指導嗎? 我在樹上叫錯了嗎?
如果我正確理解了您的問題,則可以嘗試以下操作:
public abstract class Reporting {
public void setUp(Job job) {
// set things up
}
public void tearDown(Job job) {
// post-processing stuff
}
public void process(Job job) {
setUp(job);
doProcessing(job);
tearDown(job);
}
public abstract void doProcessing(Job job);
}
public class Processor1 extends Reporting {
@Override
public void doProcessing(Job job) {
// business logic
}
}
之后,在代碼中的某個地方,您不應調用doProcessing()
,而應調用基類的process()
方法。
另外,如果我的解釋正確的話,您可能會對使用某些面向方面的編程框架(例如AcpectJ或Spring AOP)感興趣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.