工厂管理类

namespace TestSpace
{
    public static class DataTableFactory
    {
        /// <summary>
        /// 键值对容器
        /// </summary>
        private static Dictionary<string, string> dataType = new Dictionary<string, string>();

        /// <summary>
        /// 构造函数
        /// </summary>
        static DataTableFactory()
        {
            Add("infos");
        }

        /// <summary>
        /// 创建对应的dt处理类 
        /// </summary>
        /// <param name="typeName"></param>
        /// <returns></returns>
        public static IDataTable CreateData(string typeName)
        {
            try
            {
                return (IDataTable)Activator.CreateInstance(Type.GetType("TestSpace." + dataType[typeName]));
            }
            catch (Exception)
            {
                throw;
            }
        }

        /// <summary>
        /// 添加键值对,添加的值为 健+Data(健:news 值:newsData)
        ///(健唯一,dt处理类实现需要在 TestSpace 命名空间下)
        /// </summary>
        /// <param name="typeName"></param>
        /// <param name="type"></param>
        public static void Add(string typeName)
        {
            Add(typeName, typeName + "Data");
        }

        /// <summary>
        /// 添加键值对(健唯一,dt处理类实现需要在 TestSpace 命名空间下)
        /// </summary>
        /// <param name="typeName"></param>
        /// <param name="type"></param>
        public static void Add(string typeName, string type)
        {
            if (!dataType.ContainsKey(typeName))
                dataType.Add(typeName, type);
        }

    }
}

 

工厂类

namespace TestSpace
{
    public interface IDataTable
    {
        /// <summary>
        /// 输入完整dt得到需要的dt
        /// </summary>
        /// <param name="dt">完整</param>
        /// <returns></returns>
        DataTable GetData(DataTable dt, string g_id);
    }
}

 

具体实现类

namespace TestSpace
{
    /// <summary>
    /// 信息dt
    /// </summary>
    public class infosData : IDataTable
    {
        public DataTable GetData(DataTable dt, string ggg)
        {
            dt.Columns.Add(new DataColumn("link"));
            foreach (DataRow dr in dt.Rows)
            {
                dr["link"] = dr["id"];
            }
            return dt;
        }
    }
}

调用方式

IDataTable Idata = DataTableFactory.CreateData(“infos”);

 

利用Type.GetType("类名")获取相应的类型信息,再有Activator.CreateInstance(Type)创建类,因此,只用传一个对象名,就能动态创建一个对应的对象。

当需要创建没有的对象时,修改的仅仅是在工厂管理类中添加相应的名称,同时在具体实现类中添加相对应名称的方法即可。

 posted on 2017-05-26 17:23  团子先森  阅读(538)  评论(0编辑  收藏  举报