模板方法:抽取通用的流程(執行邏輯),定義抽象方法,通過定義多個子類以獲取不同的實現。
原來的**:
public void intercept(interceptorchain chain) throws throwable else if(allownesting) else
long s = system.nanotime();
try
} catch (exception e) else if(allownesting) else
if (throwex)
} finally else if(allownesting) else
}}
可以看出這一段重複了3次
if(context.isme(chain, this)) else if(allownesting) else
當我寫到第三次時已經抓狂了,這已經不是多幾行**少幾行**的事了,我怕以後有人維護這段**時會默默詛咒我。
於是套用模板方法,修改如下:
// 定義模板
private static abstract class template
boolean intercept(interceptorchain chain, abstractinterceptor i,
exception e,long begintime) else if (i.allownesting) else
return r;
}abstract boolean dointercept(interceptorchain chain,
abstractinterceptor i,exception e,long begintime);
}// 定義3個不同的實現。
private static final template before = new template("before")
};private static final template after = new template("after")
};private static final template whenexception = new template("whenexception")
};// 這是之前的那個方法
public void intercept(interceptorchain chain) throws throwable
} catch (exception e)
} finally
}
**不見得比原來少,但是心情卻舒暢了,符合開心工作的原則。
模板方法模式小記 原創
模板方法模式,定義乙個操作中的演算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類中可以不改變的乙個演算法的結構即可重定義該演算法的某些特定步驟。首先來看下模板方法模式的結構圖 abstractclass是抽象類,其實也就是一抽象模板,定義並實現了乙個模板方法。即templetemethod。這...
Spring 應用之模板方法設計模式
模板方法模式是行為設計模式的一種,它定義乙個操作中演算法的骨架,而將一些執行步驟延遲到了子類中。模板方法使得子類可以不改變演算法本身的結構,即可重新定義該演算法的某些特定步驟的實現方式。模板方法設計模式 uml 圖 public abstract class template protected v...
模板方法模式
有這樣乙個場景 乙個演算法或流程,它的步驟以及步驟之間的順序是固定的,但具體的某一步可能有不同的實現。對於這麼乙個場景,可以建立多個類,各個類實現不同的實現,但是這樣的缺點是 易錯 難改,易錯 應為步驟和順序是固定的,而且在每個類中都要寫一遍,程式設計師怎有心情不好的時候,就有可能把其中某一步給寫錯...