Design patterns 优选工厂方法实现

Design patterns 优选工厂方法实现,design-patterns,Design Patterns,我可以通过以下方式实现Factory方法: 方法1: class A { } class A1:A { } class A2:A { } static class Factory { public static A GetInstance(int i) { if (i == 1) return new A1(); else if (i == 2) retur

我可以通过以下方式实现Factory方法: 方法1:

  class A
  {

  }
  class A1:A
  {

  }

  class A2:A
  {

  }
static class Factory
{
    public static A GetInstance(int i)
    {
        if (i == 1)
            return new A1();
        else if (i == 2)
            return new A2();
        else
            return null;

    }
}
方法2:

class Factory
    {
         abstract A CreateA();
    }
    class Factory1 : Factory
    {
        public A CreateA()
        {
            return new A1();
        }
    }

    class Factory2 : Factory
    {
        public A CreateA()
        {
            return new A1();
        }

    }
哪种方法更好? 这些方法的优点/缺点是什么?
请告诉我最好的方法。

如果您遵循第一种方法,那么如果您将来需要创建一个新类型,比如说,
A3
,那么您需要修改
GetInstance
方法来为
A3
编写创建代码。这违反了—

如果遵循第二种方法,则不需要修改现有代码。您可以通过以下方式轻松合并新类型-

class Factory3 : Factory
{
    public A CreateA()
    {
        return new A3();
    }
}
这样,您就不需要修改现有代码


选择您认为适合您的用例的方法。

没有更好的方法。它们有不同的用途

第一种方法使用一个参数来决定返回哪个合适的子类实例。调用方不知道(也不关心)子类。他有一个int,并且想要这个int的合适的A

第二种方法只是构造函数的替代方法,但它会强制调用方已经知道要实例化哪个子类,并选择合适的工厂。

试着继续发布
class Factory3 : Factory
{
    public A CreateA()
    {
        return new A3();
    }
}