用抽象工厂模式来实现数据库访问访问程序作为例子
UML图形
产品抽象类:产品有可能有许多不同的实现
具体产品:对抽象产品的具体实现
工厂类:包含所有产品创建的方法并且能够创建出具体的对象
从这张图形中来理解抽象工厂模式的定义:工厂类就是接口(DataAccess),作用是创建一系列相关或相互依赖对象(sqlUser AccessUser sqlDepartment AccessDepartment),我们就不必再实例化他们的具体类来得到相应的对象
代码:
反射技术的应用
用反射技术来去除switch或if,解除分支判断带来的耦合。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
namespace 抽象工厂
{
class DateAccess
{
//static静态变量或者函数可以不用实例化类而直接访问
//定义两个私有的静态的只读的变量
//assemblyname代表的是命名空间
private static readonly string AssemblyName = "抽象工厂";
//db代表的是数据库
private static readonly string db = "sqlserver";
//定义两个静态的函数 返回值是表的接口
public static IUser CreatUser()
{
//字符串: 抽象工厂.sqlserverUser---类的名字
string classname = AssemblyName + "." + db + "User";
//反射的格式:最终返回的是iuser类型的 sqlserverUser类的实例
return (IUser)Assembly.Load(AssemblyName).CreateInstance(classname);
}
public static IDepartment CreatDepartment()
{
string classname = AssemblyName + "." + db + "Department";
//最终返回的是sqlserverDepartment类的实例
return (IDepartment)Assembly.Load(AssemblyName).CreateInstance(classname);
}
}
}