C# 反射+抽象工厂模式

此模式可以很好的更换程序使用不同的数据库

1.用到的属性类

 

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

namespace ReflectionAndAbstractFactor
{
    class User
    {

        public int Id
        {
            get;
            set;
        }

        public String Name
        {
            get;
            set;

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

namespace ReflectionAndAbstractFactor
{
    class Department
    {
        public int Id
        {
            get;
            set;
        }

        public string DepartmentName
        {
            get;
            set;
        }

    }
}


2.接口  

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

namespace ReflectionAndAbstractFactor
{
    interface IUser
    {

        void InsertUser(User user);
        User GetUser(int id);
    }
}

 

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

namespace ReflectionAndAbstractFactor
{
    interface IDepartment
    {
        void InsertDepartment(Department department);

        Department GetDepartment(int id);
       
    }
}


3.实现接口

 

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

namespace ReflectionAndAbstractFactor
{
    class SqlServerUser:IUser
    {

        public void InsertUser(User user)
        {

            Console.WriteLine("sql server insert user " + user);
        }

        public User GetUser(int id)
        {
            Console.WriteLine("sql server get user " );
            return null;
        }

    }
}

 

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

namespace ReflectionAndAbstractFactor
{
    class SqlServerDepartment:IDepartment
    {
        public void InsertDepartment(Department department)
        {
            Console.WriteLine("sql server insert department");
        }


        public Department GetDepartment(int id)
        {

            Console.WriteLine("sql server get department");
            return null;
            
        }


    }
}

 

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

namespace ReflectionAndAbstractFactor
{
    class OracleUser:IUser
    {
        public void InsertUser(User user)
        {
            Console.WriteLine("oracle inser user");
        
        }


        public User GetUser(int id)
        {
            Console.WriteLine("oracle get user");
            return null;
        }

    }
}

 

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

namespace ReflectionAndAbstractFactor
{
    class OracleDepartment:IDepartment
    {
        public void InsertDepartment(Department department)
        {
            Console.WriteLine("oracle insert department");
        }

        public Department GetDepartment(int id)
        {

            Console.WriteLine("oracle get department");
            return null;
        }

    
    }
}


4.反射

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using System.Configuration;
namespace ReflectionAndAbstractFactor
{
    class DataAcess
    {
        private static readonly string assemblyName = "ReflectionAndAbstractFactor";
        //private static readonly string db = "SqlServer";

        private static readonly string db = ConfigurationManager.AppSettings["db"].ToString();
        public static IUser CreateUser()
        {
            string className = assemblyName + "." + db + "User";
            return (IUser)Assembly.Load(assemblyName).CreateInstance(className);

        }

        public static IDepartment CreateDepartment()
        {
            string className = assemblyName + "." + db + "Department";
            return (IDepartment)Assembly.Load(assemblyName).CreateInstance(className);

        }




    }
}

 

  5.使用

    

   private void button1_Click(object sender, EventArgs e)
        {
            User user=new User();
            user.Name="user name";
            user.Id=1;
            IUser _User = DataAcess.CreateUser();
            _User.InsertUser(user);
            _User.GetUser(1);


            Department department=new Department();
            department.DepartmentName = "department name";
            department.Id = 66;

            IDepartment _Department = DataAcess.CreateDepartment();
            _Department.InsertDepartment(department);
            _Department.GetDepartment(6);



        }

 

    

posted @ 2016-03-04 11:24  ike_li  阅读(654)  评论(0)    收藏  举报