title: Correct approach on implementing abstract factory pattern?
body: <p>I am about to build a data access layer the good old ado.net way. Traditionally I would have built the dal according to a simple repository pattern. But this time I wanna give the Abstract Factory pattern a try because I have read about this pattern in an article lately.</p>
  
  <p>So here I am try to code a dal with the abstract factory pattern. First of let me explain what I got so far. What I wanna know afterwards is whether my approach is the correct way of implementing this pattern and what the advantages are towards the repository approach.</p>
  
  <p>So I wrote the following classes:</p>
  
  <pre><code>public abstract class Db
  {
       //this is class will contain methods like:
       //public abstract IDbConnection CreateConnectionInstance();
  }
  
  public class SqlDb : Db
  {
       //this is class will contain methods like:
       //public override IDbConnection CreateConnectionInstance()
       //{
       //      ... return new SqlConnection();
       //}
  }
  
  public class OracleDb : Db
  {
  
  }
  
  public class MockupDb : Db
  {
  
  }
  
  //this class generates the fitting provider but does not have a base (is this correct?)
  public static class DbFactory
  {
      public static Db CreateInstance(DbProviderType dbProviderType)
      {
          Db db = null;
          switch (dbProviderType)
          {
              case DbProviderType.Oracle:
                  db = new OracleDb();
                  break;
              case DbProviderType.Sql:
                  db = new SqlDb();
                  break;
              case DbProviderType.Mockup:
                  db = new MockupDb();
                  break;
              default:
                  break;
          }
          return db;
      }
  }
  </code></pre>
  
  <p>So my questions in short:
  1) Is this a correct implementation of the abstract factory pattern?
  2) What can be done better?
  3) What is the advantage towards different repository classes which inherit from a base class?</p>
  
  <p>Thx a lot guys.</p>
  
  <p>If you need more information on my code please tell me. But there is no more at this point of time!</p>