templateの特殊化をやるとしたら

こんな感じかなぁ。
特定のメソッドだけすり替えるのもいいかもしれないけど。
結構無理やりというか,めんどいですね。
もっといい方法はないものか・・・

public class TestPotato
{
	public void Test()
	{
		var a = new PotatoMaster<float, double>();
		var b = new PotatoMaster<int, int>();
		var c = new PotatoMaster<string, double?>();

		string message = "do you like potato ??";
		a.ShowMessage( message );
		b.ShowMessage( message );
		c.ShowMessage( message );
	}
}
public interface IPotato
{
	void ShowMessage( string message );
}
public class PotatoMaster<T1, T2> : IPotato
{
	private IPotato core = PotatoFactory<T1, T2>.Create();

	public void ShowMessage( string message )
	{
		this.core.ShowMessage( message );
	}
}

public static class PotatoFactory<T1, T2>
{
	private delegate IPotato Creator();
	private static Creator creator = ( () => new Potato1() );

	static PotatoFactory()
	{
		PotatoFactory<T1, int>.creator = ( () => new Potato2() );
		PotatoFactory<string, double?>.creator = ( () => new Potato3() );
	}
	
	public static IPotato Create()
	{
		return creator();
	}
}
public class Potato1 : IPotato
{
	public void ShowMessage( string message )
	{
		Console.WriteLine( message );
	}
}
public class Potato2 : IPotato
{
	public void ShowMessage( string message )
	{
		Console.WriteLine( "potato ume-------!!!!" );
	}
}
public class Potato3 : IPotato
{
	public void ShowMessage(string message)
	{
		Console.WriteLine("potato oisi-------!!!!");
	}
}

do you like potato ??
potato ume-------!!!!
potato oisi-------!!!!