現在我們在開發一些web項目或者WInform項目時,我們都要數據庫來管理所有的信息,現在就以我開發的一個系統《隴原商城》為例,假如我的系統投入使用了,假如我用的數據庫就是Access數據庫,但是,過了一段時間,由于隴原商城貨買的非常好,Access數據庫已近不能滿足客戶的需求了,這時候客戶想換成Sql Server數據庫,這樣的話,我們又必須重新編寫代碼,重新換成Sql Server數據庫來實現,假如又過了一段時間,Sql Server數據庫也不能滿足用戶的的需求,這時候用戶又想換成Oracel數據庫來實現呢,到這里就不說了,可能我們開發人員就帶吐血啊,這樣就引起來我們的深思,我們怎么樣做一個系統可以讓我們不在那么麻煩的修改代碼呢?這就涉及到設計模式了,所以就出現了工廠方法模式,下面用工廠方法模式做一個小實驗來實現這樣的一個過程。
新建一個控制臺應用程序,命名為FactoryMethodPattern,在控制臺中添加一個IProductDAL接口,在里面定義一個方法,實現如下:
代碼如下:
namespace FactoryMethodPattern
{
public interface IProductDAL
{
void Insert();
}
}
然后新建接口實現工廠模式IProductDALFactory,實現如下:
代碼如下:
namespace FactoryMethodPattern
{
public interface IProductDALFactory
{
IProductDAL CreateProductDAL();
}
}
接下來在項目中添加類AccessProductDAL,繼承自接口IProductDAL,實現的方法是向控制臺
namespace FactoryMethodPattern
{
public class AccessProductDAL:IProductDAL
{
#region IProductDAL 成員
public void Insert()
{
Console.WriteLine("AccessProductDAL.Insert");
}
#endregion
}
}
然后創建一個AccessProductDAL的工廠類,使他繼承自IProductDALFactory接口,創建一個方法使其它的返回值為IProductDAL,最后在方法的實現里面返回實例化的AccessProductDAL,實現代碼如下:
代碼如下:
namespace FactoryMethodPattern
{
public class AccessProductDALFactory:IProductDALFactory
{
#region IProductDALFactory 成員
public IProductDAL CreateProductDAL()
{
return new AccessProductDAL();
}
#endregion
}
}
接下來寫一下:實現Sql Server數據庫的方法,添加一個類SqlProductDAL,使其方法
namespace FactoryMethodPattern
{
public class SqlProductDAL:IProductDAL
{
#region IProductDAL 成員
public void Insert()
{
Console.WriteLine("SqlProductDAL.Insert");
}
#endregion
}
}
再添加SqlProductDALFactory類,實現代碼如下:
代碼如下:
namespace FactoryMethodPattern
{
public class SqlProductDALFactory:IProductDALFactory
{
#region IProductDALFactory 成員
public IProductDAL CreateProductDAL()
{
return new SqlProductDAL();
}
#endregion
}
}
接下來添加App.config文件,來實現系統所選擇的數據庫是什么數據庫,代碼如下:
代碼如下:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="DALFactory" value="FactoryMethodPattern.SqlProductDALFactory"/>
</appSettings>
</configuration>
在寫業務邏輯層BLL,利用反射獲取app.config中所選擇的路徑是什么。讀取出來
代碼如下:
代碼如下:
namespace FactoryMethodPattern
{
public class BLL
{
public void Insert()
{
//利用反射實現功能
IProductDALFactory factory =(IProductDALFactory) Assembly.GetExecutingAssembly().CreateInstance(ConfigurationManager.AppSettings["DALFactory"]);
IProductDAL pro = factory.CreateProductDAL();
pro.Insert();
}
}
}
最后在program里面讀取BLL層信息,
namespace FactoryMethodPattern
{
class Program
{
static voidMain(string[] args)
{
BLL product = new BLL();
product.Insert();
Console.ReadKey();
}
}
}
最后單擊運行顯示的
現在這個小系統整體就完成了,現在我要加入Oracel數據庫呢?我只要在寫兩個Oracel數據庫的類加到里面,再在app.config中修改一下路徑就OK了。
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com