熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

C#設計模式之簡單工廠篇

2022-06-13   來源: .NET編程 

  首先定義一個接口具體名為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 command;

  public bool Connect(string ConnectString)

  {

  try

  {

  conn = new SqlConnection(ConnectString);

  return true;

  }

  catch(SqlException)

  {

  return false;

  }

  }

  public bool Open()

  {

  try

  {

  connOpen();

  return true;

  }

  catch(SqlException)

  {

  return false;

  }

  }

  public bool Command(string SQL)

  {

  try

  {

  command = new SqlCommand(SQLconn);

  commandExecuteNonQuery();

  return true;

  }

  catch(SqlException)

  {

  return false;

  }

  }

  public void Close()

  {

  connClose();

  connDispose();

  }

  }

  呵呵有點長咬著牙讀完心裡明白了就會很舒服的如果你現在有這種感覺了再接再厲再為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 WebConfig

  string DBType = ConfigurationSettingsAppSettings[DBType];

  string DBConnectString = ConfigurationSettingsAppSettings[DBConn];

  IDatabase DB = FactorySelectDatabase(DBType);

  //Connect the selected database

  if(DBConnect(DBConnectString)==false)

  {

  ConsoleWriteLine(The database {} can@#t be connectedDBType);

  return;

  }

  //Open database

  if(DBOpen()==false)

  {

  ConsoleWriteLine(The database {} can@#t be opened the connect string is {}DBTypeDBConnectString);

  return;

  }

  //Execute SQL Command

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

  if(DBCommand(SQL))

  {

  //Do something

  }

  else

  {

  ConsoleWriteLine(The Operator is not success SQL statament is {}SQL);

  DBClose();

  return;

  }

  DBClose();

  }

  }

  好了工程峻工了你們明白了沒有?

  思考題簡單工廠的應用場合和局限性?

  作業題假如要開發一個多媒體播放器既能用Window MediaPlayer播放又能用RealPlayer播放還能用QuickTime播放具體用什麼播放器由客戶選擇請你畫出UML圖並寫出代碼


From:http://tw.wingwit.com/Article/program/net/201311/11462.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.