C# 反射+抽象工厂模式
2016-03-04 11:24
375 查看
此模式可以很好的更换程序使用不同的数据库
1.用到的属性类
2.接口
3.实现接口
4.反射
5.使用
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); }
相关文章推荐
- C#从零开始——使用VS生成dll并调用
- C# 类和结构
- C# Serializable
- C#四舍五入
- C# 操作鼠标
- C#写日志
- C#中的static静态变量的用法
- C#选择文件、选择文件夹、打开文件(或者文件夹)
- c#使用类库编写word插件注意事项
- 谈谈C# replace在正则表达式中的意义
- C#计算两个日期之间相差的天数
- VS中C#工程加载动态库报错
- c#使用正则表达式
- C#中正则表达式在replace中的应用!
- C#总结(1)-从抚摸“Console.WriteLine”开始的逐渐深入
- C# 代码生成器 (存储过程生成方法)
- 【C#进阶系列】05 基元类型、引用类型和值类型
- C# 文件操作类集合(三) INI相关
- C# 文件操作类集合(二) 文件处理
- C# 文件操作类集合(一) 路径