title: Abstract Design Pattern implementation
body: <p>I started learning design patterns a while ago (only covered facade and abstract so far, but am enjoying it). I'm looking to apply the Abstract pattern to a problem I have.  The problem is: Supporting various Database systems using one abstract class and a set of methods and properties, which then the underlying concrete classes (inheriting from abstract class) would be implementing.</p>
  
  <p>I have created a DatabaseWrapper abstract class and have create SqlClientData and MSAccessData concrete class that inherit from the DatabaseWrapper.</p>
  
  <p>However, I'm still a bit confused about how the pattern goes as far as implementing these classes on the Client.</p>
  
  <p>Would I do the following?:</p>
  
  <pre><code>DatabaseWrapper sqlClient = new SqlClientData(connectionString);
  </code></pre>
  
  <p>This is what I saw in an example, but that is not what I'm looking for because I want to encapsulate the concrete classes; I only want the Client to use the abstract class.  This is so I can support for more database systems in the future with minimal changes to the Client, and creating a new concrete class for the implementations.</p>
  
  <p>I'm still learning, so there might be a lot of things wrong here. Please tell me how I can encapsulate all the concrete classes, and if there is anything wrong with my approach.</p>
  
  <p>Many Thanks!</p>
  
  <p>PS: I'm very excited to get into software architecture, but still am a beginner, so take it easy on me. :)</p>