Something i Want
如果你经常重构的话,那么你会发现Extract Method是一个常用的方法,并且随着你不断的Extract
Method,渐渐的你的代码种就会浮现出Template Method模式。
以下就是一个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来实现Template Method是一种比较好的方法,但是相对于abstract class而言interface是更常用的定义contract的方式。但是interface却要求所有的方法都是public,而Template Method中包含的其他方法往往是private和protected的。
那么我就希望有一种机制可以保证Template Method能够被安全的实现。
利用constains关键字来定义某个方法中需要包含的方法以及它们出现的顺序
constains CheckConstains
{
void CheckBank();
void CheckCredit();
void CheckLoan();
void CheckStock();
void CheckIncome();
}
public interface ICheckBackground
{
[CheckConstains]
void Check();
}
作为程序员,在编程的时候最怕的是要记住某些上下文,才能把代码正确的写出来,这样是很不可靠的。
我们当然希望在编程的时候需要记住的东西越少越好,而Template Method模式的应用又是如此的广泛,所以我觉得需要以上这种约束, 这样在以后为ICheckBackground添加新的实现的时候就不会出问题了。