interface CoR
{
public string operation(string data);
}
class ChainA<T> : CoR where T : class , CoR
{
protected CoR myNextCoR;
public string operation(string data)
{
if (isMyOperation(data))
{
return myOperation(data);
}
if (T != null) return myNextCoR.operation(data);
return "no operation found";
}
protected override bool isMyOperation(string data)
{
return data.StartsWith("1");
}
protected override string myOperation(string data)
{
return data.ToUpper();
}
}
class ChainB<T> : CoR where T : CoR, class
{
protected CoR myNextCoR;
public string operation(string data)
{
if (isMyOperation(data))
{
return myOperation(data);
}
if (T != null) return myNextCoR.operation(data);
return "no operation found";
}
protected override bool isMyOperation(string data)
{
return data.StartsWith(“2");
}
protected override string myOperation(string data)
{
return data.ToLower();
}
}
class CorFactory
{
public static CoR makeCoR()
{
return new ChainA<ChainB<ChainEnd>>(
new ChainB<null>());
}
}