我正在設置一個測試組件,並試圖保持它的通用性。我想使用一個通用的Visitor類,但不確定使用後代類。在C中使用子訪問者#
實施例:
public interface Interface_Test_Case
{
void execute();
void accept(Interface_Test_Visitor v);
}
public interface Interface_Test_Visitor
{
void visit(Interface_Test_Case tc);
}
public interface Interface_Read_Test_Case
: Interface_Test_Case
{
uint read_value();
}
public class USB_Read_Test
: Interface_Read_Test_Case
{
void execute()
{ Console.WriteLine("Executing USB Read Test Case."); }
void accept(Interface_Test_Visitor v)
{ Console.WriteLine("Accepting visitor."); }
uint read_value()
{
Console.WriteLine("Reading value from USB");
return 0;
}
}
public class USB_Read_Visitor
: Interface_Test_Visitor
{
void visit(Interface_Test_Case tc)
{ Console.WriteLine("Not supported Test Case."); }
void visit(Interface_Read_Test_Case rtc)
{ Console.WriteLine("Not supported Read Test Case."); }
void visit(USB_Read_Test urt)
{ Console.WriteLine("Yay, visiting USB Read Test case."); }
}
// Code fragment
USB_Read_Test test_case;
USB_Read_Visitor visitor;
test_case.accept(visitor);
哪些C#編譯器使用,以確定哪些在USB_Read_Visitor
的方法將由該代碼片段執行的規則?
我想分解我的測試組件的依賴關係。不幸的是,我目前的Visitor類包含visit
方法,用於與測試組件無關的類。我是否想要實現不可能的目標?
「代碼片段」根本不引起USB_Read_Visitor的任何成員的調用。 USB_Read_Test.accept()對其參數沒有任何作用。 – Odrade 2011-03-12 00:23:25
我很想標題更改爲與「方法解析順序」再投,收爲是重複的東西[方法解析順序(http://stackoverflow.com/questions/2164960/method-resolution-order) 。除了用它作爲例子之外,這與訪問者模式沒有多大關係。 – 2011-03-12 01:18:23
@Jeff M:我試圖實現一個通用測試用例的訪問者設計模式。測試用例的容器Test_Suite將*應用*訪問者到每個測試用例。經典的訪客設計模式將包括每種測試用例的「訪問」方法。這意味着測試經理必須參考所有測試用例。耦合變得非常緊密,這與我試圖達到的目的相反。 – 2011-03-12 06:14:30