Something i Want
如果你經(jīng)常重構(gòu)的話,那么你會發(fā)現(xiàn)Extract Method是一個(gè)常用的方法,并且隨著你不斷的Extract
Method,漸漸的你的代碼種就會浮現(xiàn)出Template Method模式。
以下就是一個(gè)Template Method的示例
abstract class CheckBackground
{
protected abstract void CheckBank();
protected abstract void CheckCredit();
protected abstract void CheckLoan();
protected abstract void CheckStock();
protected abstract void CheckIncome();
//work as template method
public void Check()
{
CheckBank();
CheckCredit();
CheckLoan();
CheckStock();
CheckIncome();
}
}
用abstract class來實(shí)現(xiàn)Template Method是一種比較好的方法,但是相對于abstract class而言interface是更常用的定義contract的方式。但是interface卻要求所有的方法都是public,而Template Method中包含的其他方法往往是private和protected的。
那么我就希望有一種機(jī)制可以保證Template Method能夠被安全的實(shí)現(xiàn)。
利用constains關(guān)鍵字來定義某個(gè)方法中需要包含的方法以及它們出現(xiàn)的順序
constains CheckConstains
{
void CheckBank();
void CheckCredit();
void CheckLoan();
void CheckStock();
void CheckIncome();
}
public interface ICheckBackground
{
[CheckConstains]
void Check();
}
作為程序員,在編程的時(shí)候最怕的是要記住某些上下文,才能把代碼正確的寫出來,這樣是很不可靠的。
我們當(dāng)然希望在編程的時(shí)候需要記住的東西越少越好,而Template Method模式的應(yīng)用又是如此的廣泛,所以我覺得需要以上這種約束, 這樣在以后為ICheckBackground添加新的實(shí)現(xiàn)的時(shí)候就不會出問題了。
浙公網(wǎng)安備 33010602011771號