您的位置:首页 > 编程语言 > C#

C# 反射+抽象工厂模式

2016-03-04 11:24 375 查看
此模式可以很好的更换程序使用不同的数据库

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);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: