1. 程式人生 > >簡單工廠模式+反射來改進抽象工廠模式

簡單工廠模式+反射來改進抽象工廠模式

抽象工廠模式:提供一個建立一系列相關或相互依賴物件的介面,而無需制定它們具體的類

用抽象工廠模式來實現資料庫訪問訪問程式作為例子

UML圖形


產品抽象類:產品有可能有許多不同的實現

具體產品:對抽象產品的具體實現

工廠類:包含所有產品建立的方法並且能夠創建出具體的物件

從這張圖形中來理解抽象工廠模式的定義:工廠類就是介面(DataAccess),作用是建立一系列相關或相互依賴物件(sqlUser   AccessUser   sqlDepartment AccessDepartment),我們就不必再例項化他們的具體類來得到相應的物件

程式碼:

反射技術的應用

用反射技術來去除switch或if,解除分支判斷帶來的耦合。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;

namespace 抽象工廠
{
    class DateAccess
    {
        //static靜態變數或者函式可以不用例項化類而直接訪問
        //定義兩個私有的靜態的只讀的變數
        //assemblyname代表的是名稱空間
        private static readonly string AssemblyName = "抽象工廠";
        //db代表的是資料庫
        private static readonly string db = "sqlserver";

        //定義兩個靜態的函式 返回值是表的介面
        public static IUser CreatUser()
        {
            //字串: 抽象工廠.sqlserverUser---類的名字
            string classname = AssemblyName + "." + db + "User";

            //反射的格式:最終返回的是iuser型別的 sqlserverUser類的例項
            return (IUser)Assembly.Load(AssemblyName).CreateInstance(classname);
        }

        public static IDepartment CreatDepartment()
        {
            string classname = AssemblyName + "." + db + "Department";

            //最終返回的是sqlserverDepartment類的例項
            return (IDepartment)Assembly.Load(AssemblyName).CreateInstance(classname);
        }
    }
}