C#应用程序中的抽象工厂实现

时间:2015-04-13 10:57:42

标签: c# .net oop design-patterns

我想实施abstract factory design pattern。我添加了这个代码段:

  public class Class1
{

   static Ete _ete;
   static Hiver _hiver;


    public static void Main(Clothes cl)
    {
        _ete = cl.CreateEteClothes();
        _hiver = cl.CreateHiverClothes();
        Console.WriteLine(_ete.GetMarque());
        Console.ReadKey();
        Console.WriteLine(_hiver.GetMarque());
        Console.ReadKey();

    }
}


public abstract class Clothes
{
    public abstract Ete CreateEteClothes();
    public abstract Hiver CreateHiverClothes();

}


public abstract class ItalianFactory: Clothes
{
    public override Ete CreateEteClothes()
    {
        return new TShirtJuve();
    }

    public override Hiver CreateHiverClothes()
    {
        return new PullJuve();
    }
}
public abstract class FrenchFactory : Clothes
{
    public override Ete CreateEteClothes()
    {
        return new TShirtPsg();
    }

    public override Hiver CreateHiverClothes()
    {
        return new PullPsg();
    }

}

public abstract class TunisianFactory : Clothes
{
    public override Ete CreateEteClothes()
    {
        return new TShirtCa();
    }

    public override Hiver CreateHiverClothes()
    {
        return new PullCa();
    }

}

public abstract class Ete
{ 
public abstract string GetMarque();
}

public abstract class Hiver
{
    public abstract string GetMarque();
}

public class TShirtJuve: Ete
{

    public override string GetMarque()
    {
        return "Juventus T shirt";
    }
}

public class TShirtPsg : Ete
{

    public override string GetMarque()
    {
        return "PSG T shirt";
    }
}

public class TShirtCa : Ete
{

    public override string GetMarque()
    {
        return "club africain T shirt";
    }
}


public class PullJuve : Hiver
{

    public override string GetMarque()
    {
        return "Juventus Pull";
    }
}

public class PullPsg : Hiver
{

    public override string GetMarque()
    {
        return "PSg Pull";
    }
}
public class PullCa : Hiver
{

    public override string GetMarque()
    {
        return "Club africain Pull";
    }
}

我想测试一下这个实现,但是我得到一个异常表明主方法的签名是不可接受的。

那么如何修复我的代码来测试这个设计模式实现呢?

1 个答案:

答案 0 :(得分:2)

您有public static void Main(Clothes cl)

这应该是static void Main(string[] args),因为这是应用程序的入口点,并且只能有一个入口点。有关详细信息,请参阅.NET documentation

方法的签名通常由方法名称,返回类型和参数组成。您的应用程序期望Main方法的正确签名,因此它会给您这个例外。