設計模式學習筆記-抽象原廠模式

來源:互聯網
上載者:User

概述:                                                                                                         

抽象工廠(abstractFactory):提供一個建立一系列相關或相互依賴對象的介面,而無需指定他們的具體類

適用場合:

1.一個系統要獨立於它的產品的建立、組合和表示時。

2.一個系統要由多個產品系列中的一個來配置時。

3.當你強調一系列相關的產品對象的設計以便進行聯合使用時。

4.當你提供一個產品類庫,而只想顯示他們的介面而不是實現時。

類圖:                                                                                                       

範例程式碼:                                                                                                  

這裡列舉出當前比較簡單的資料庫訪問層的代碼結構,通過反射來實現,沒有用單純的抽象原廠模式

///<summary>
/// 提供者
///</summary>
publicinterface IUser
{
void AddUser();
}
///<summary>
/// 資料訪問層的工廠配置
///</summary>
class DataAccess
{
///<summary>
/// 程式集路徑 一般通過設定檔來讀取
///</summary>
privatestaticstring path ="Jqpress.Data";
///<summary>
/// 資料庫類型 一般通過設定檔來讀取
///</summary>
privatestaticstring dbtype ="Sqlserver";

privatestaticobject lockObject =newobject();

privatestatic IUser _user =null;
///<summary>
/// 通過反射執行個體化user
///</summary>
///<returns></returns>
publicstatic IUser InstanceUser()
{
string className = path+"." + dbtype +".User";
return CreateInstance<IUser>(_user,className);
}
///<summary>
/// 通過單例 執行個體化反射
///</summary>
///<typeparam name="T"></typeparam>
///<param name="path"></param>
///<param name="className"></param>
///<returns></returns>
privatestatic T CreateInstance<T>(T _instance,string className)
{
if (_instance==null)
{
lock (lockObject)
{
if(_instance==null)
{
_instance = (T)Assembly.Load(path).CreateInstance(className);
}
}

}
return _instance;
}
}
///<summary>
/// 實現IUser介面
///</summary>
class UserData:IUser
{
publicvoid AddUser() { }
}
///<summary>
/// 業務層調用
///</summary>
class Service
{
static IUser dao = DataAccess.InstanceUser();
publicvoid AddUser()
{
dao.AddUser();
}
}

  

小結:                                                                                                          

抽象原廠模式在設計底層資料庫存取碼的時候用到的比較多,但是一般情況下都是通過反射來實現

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.