反射+抽象工厂模式
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 }
欢迎转载或分享,如果文章对你有帮助,请给予推荐,欢迎交流及关注!!!