反射+抽象工厂模式

1.抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类

2.反射:

例子:

webconfig部分:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <appSettings>
        <add key="DB" value="Sqlserver"/>
    </appSettings>
</configuration>

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
/**/
using System.Reflection;//反射
using System.Configuration;

namespace 抽象工厂模式
{
    class Program
    {
        static void Main(string[] args)
        {
            User user = new User();
            Department department = new Department();
            IUser iu = DataAccess.CreatUser();
            iu.Insert(user);
            iu.GetUser(1);

            IDepartment id = DataAccess.CreatDepartment();
            id.Insert(department);
            id.Getdepartment(1);
            Console.Read();
        }
    }
    #region 公共属性
    class User
    {
        private int _id;
        public int ID
        {
            get { return _id; }
            set { _id = value; }
        }

        private string _name;
        public string Name
        {
            get { return _name; }
            set { _name = value; }
        }
    }

    class Department
    {
        private int _id;
        public int ID
        {
            get { return _id; }
            set { _id = value; }
        }

        private string _deptName;
        public string DeptName
        {
            get { return _deptName; }
            set { _deptName = value; }
        }
    }
    #endregion

    #region 用户接口
    /// <summary>
    /// 用户接口
    /// </summary>
    interface IUser
    {
        void Insert(User user);
        User GetUser(int id);
    }
    #endregion

    #region 部门接口
    /// <summary>
    /// 部门接口
    /// </summary>
    interface IDepartment
    {
        void Insert(Department department);
        Department Getdepartment(int id);
    }
    #endregion

    #region 用户接口的实现
    class SqlserverUser : IUser
    {
        public void Insert(User user)
        {
            Console.WriteLine("在SqlserverUser中给User表增加一条记录");
        }
        public User GetUser(int id)
        {
            Console.WriteLine("在SqlserverUser中根据ID得到User的一条记录");
            return null;
        }
    }
    class AccessUser : IUser
    {
        public void Insert(User user)
        {
            Console.WriteLine("在AccessUser中给User表增加一条记录");
        }
        public User GetUser(int id)
        {
            Console.WriteLine("在AccessUser中根据ID得到User的一条记录");
            return null;
        }
    }
    #endregion

    #region 部门接口的实现
    class SqlserverDepartment : IDepartment
    {
        public void Insert(Department department)
        {
            Console.WriteLine("在SqlserverDepartment中给Department增加一条记录");
        }
        public Department Getdepartment(int id)
        {
            Console.WriteLine("在SqlserverDepartment中根据ID得到Department的一条记录");
            return null;
        }
    }
    class AccessDepartment : IDepartment
    {
        public void Insert(Department department)
        {
            Console.WriteLine("在AccessDepartment中给Department增加一条记录");
        }
        public Department Getdepartment(int id)
        {
            Console.WriteLine("在AccessDepartment中根据ID得到Department的一条记录");
            return null;
        }
    }
    #endregion

    #region 反射技术
    class DataAccess
    {
        private static readonly string AssemblyName="抽象工厂模式";//程序集名称
        private static readonly string db=ConfigurationManager.AppSettings["DB"];
        public static IUser CreatUser()
        {
            string className = AssemblyName + "." + db + "User";//命名空间.类的名称

            return (IUser)Assembly.Load(AssemblyName).CreateInstance(className);
        }
        public static IDepartment CreatDepartment()
        {
            string className = AssemblyName + "." + db + "Department";
            return (IDepartment)Assembly.Load(AssemblyName).CreateInstance(className);
        }
    }
      #endregion
}

 

 

posted @ 2013-04-09 23:53  摩天轮的幸福  阅读(1545)  评论(0编辑  收藏  举报