程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 終極版:由簡單工廠模式,升級到抽象工廠模式(用到反射),終極版工廠

終極版:由簡單工廠模式,升級到抽象工廠模式(用到反射),終極版工廠

編輯:C#入門知識

終極版:由簡單工廠模式,升級到抽象工廠模式(用到反射),終極版工廠


前面兩個已經學習簡單三層到簡單工廠模式的變化,但是簡單工廠模式還是有個缺點,就是簡單工廠中集合了所有的實例的創建。也不是很好。

現在想到使用抽象工廠的方式來實現這個:

我們在程序集中加上下面的代碼:

<appSettings>
  <!--命名空間-->
  <add key="DALNameSpace" value="DAL"/>
  <!--程序集-->
  <add key="DALAssembly" value="DAL"/>
</appSettings>

然後新建一個抽象工廠類:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Reflection;
using System.Configuration;
using IDAL;
namespace DALFactory
{
   public class DALAbstractFactory
    {
       /// <summary>
       ///命名空間
       /// </summary>
       public static string DALNameSpace
       {
           get 
           {
               return ConfigurationManager.AppSettings["DALNameSpace"];
           }
       }

       /// <summary>
       /// 程序集
       /// </summary>
       public static string DALAssembly 
       {
           get 
           {
               return ConfigurationManager.AppSettings["DALAssembly"];
           }
       }

       public IClassDAL GetClassInstance()
       {
           string fullNameSpace = DALNameSpace + ".ClassDAL";

          return CreateInstance(fullNameSpace, DALAssembly) as IDAL.IClassDAL;
       }

       /// <summary>
       /// 創建實例
       /// </summary>
       /// <param name="fullClassNameSpace"></param>
       /// <param name="assembly"></param>
       public static object CreateInstance(string fullClassNameSpace,string assembly)
       {
          var DALAssembly=  Assembly.Load(assembly);

         return DALAssembly.CreateInstance(fullClassNameSpace);
       }

    }
}

上面的方法,通過反射,創建DAL數據訪問層的實例。

現在在業務層,我們可以這樣:

using DAL;
using Entity;
using IDAL;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BLL
{
    public class ClassBLL
    {
        //耦合度太高
       // ClassDAL dal = new ClassDAL();

        //這種還是有耦合,業務層和數據訪問層耦合度太高

       //IClassDAL dal = new ClassDAL();

        //引入簡單工廠模式

        //IClassDAL dal = DALFactory.DALFactory.GetClassInstance();

        //引入抽象工廠
        IClassDAL dal = DALFactory.DALAbstractFactory.GetClassInstance();

        /// <summary>
        /// 獲取Class列表
        /// </summary>
        /// <returns></returns>
        public List<ClassEntity> GetList()
        {
            return dal.GetList();
        }
    }
}

效果圖:

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved