知识大全 C#设计模式之简单工厂篇

Posted

篇首语:幼苗需要土壤的滋养,孩子需要教师的爱护。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 C#设计模式之简单工厂篇相关的知识,希望对你有一定的参考价值。

C#设计模式之简单工厂篇  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  首先定义一个接口 具体名为Idatabase 在这个接口中 定义好数据库操作的方法名和参数 以及返回值 本案例中我定义如下方法

  public interface IDatabase

  

  bool Connect(string ConnectString);

  bool Open();

  bool Command(string SQL);

  void Close();

  

  重要提醒 接口一生唯谨慎 定义大事不糊涂 编写接口时一定要考虑周全 并对参数 返回值进行反复推敲 为什么?因为所有的实现类都是要根据该接口的规范进行代码具体编写 也即接口的定义是公用的 一旦改动了接口 后果就是所有的实现类也都必须相应调整

  然后就是编写具体的实现类了 客户要求多少不同类型的数据库 你就定义多少个Idatabase的实现类 虽然工作量大了点 可当你看到客户满意的笑容时 你心里也就会有一种由衷的幸福感 好了 SqlServer实现类代码如下

  public class SqlServer : IDatabase

  

  SqlConnection conn;

  SqlCommand mand;

  public bool Connect(string ConnectString)

  

  try

  

  conn = new SqlConnection(ConnectString);

  return true;

  

  catch(SqlException)

  

  return false;

  

  

  public bool Open()

  

  try

  

  conn Open();

  return true;

  

  catch(SqlException)

  

  return false;

  

  

  public bool Command(string SQL)

  

  try

  

  mand = new SqlCommand(SQL conn);

  mand ExecuteNonQuery();

  return true;

  

  catch(SqlException)

  

  return false;

  

  

  public void Close()

  

  conn Close();

  conn Dispose();

  

  

  呵呵 有点长 咬著牙读完 心里明白了就会很舒服的 如果你现在有这种感觉了 好 再接再厉 再为Oracle实现类编写具体代码吧 依葫芦画瓢 大家有空就画一下吧 我就画个雏形了

  public class Oracle : IDatabase

  

  public Oracle()

  

  

  public bool Connect(string ConnectString)

  

  return true;

  

  public bool Open()

  

  return true;

  

  public bool Command(string SQL)

  

  return true;

  

  public void Close()

  

  

  

  嗯 不错 你有多少种数据库就编写不同的实现类代码吧 这里就不赘述了 接下来呢?聪明的读者一定会想到这个问题 这个接口和这么多的实现类怎么用啊?我们再定义一个称之为工厂的类 由它来决定选用哪种数据库为进行操作 这个类比较简单

  public class Factory

  

  public static IDatabase SelectDatabase(string DatabaseType)

  

  switch(DatabaseType)

  

  case SqlServer :

  return new SqlServer();

  case Oracle :

  return new Oracle();

  default:

  return new SqlServer();

  

  

  

  看明白了吗?好了 我们该让尊敬的 永远高贵的客户出场了 只有他 唯有他才有决定用哪种数据库的最高权限 你看 他这样用

  public class Client

  

  public static void Main()

  

  //Get the database information from Web Config

  string DBType = ConfigurationSettings AppSettings[ DBType ];

  string DBConnectString = ConfigurationSettings AppSettings[ DBConn ];

  IDatabase DB = Factory SelectDatabase(DBType);

  //Connect the selected database

  if(DB Connect(DBConnectString)==false)

  

  Console WriteLine( The database can@#t be connected DBType);

  return;

  

  //Open database

  if(DB Open()==false)

  

  Console WriteLine( The database can@#t be opened the connect string is DBType DBConnectString);

  return;

  

  //Execute SQL Command

  string SQL = update Order set price = price * where productID = @# @# ;

  if(DB Command(SQL))

  

  //Do something

  

  else

  

  Console WriteLine( The Operator is not success SQL statament is SQL);

  DB Close();

  return;

  

  DB Close();

  

  

  好了 工程峻工了 你们明白了没有?

  思考题 简单工厂的应用场合和局限性?

cha138/Article/program/net/201311/11462

相关参考