抽象工厂模式实现不同数据库(ACCess、SQL)实现用户和部门操作,用反射的方式切换...

这篇博客通过VS2013建模自动生成代码,介绍了如何利用抽象工厂模式实现用户和部门的操作,分别针对Access和SQL数据库。博客详细展示了用户和部门的实体、操作契约、以及不同数据库的实现类,并探讨了使用反射动态切换数据库实现的方法。其主要目的是实现系统与产品创建的解耦,并允许在运行时选择产品系列。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.用vs2013建模如果


[img]http://dl2.iteye.com/upload/attachment/0110/5525/f428a18e-bf05-398d-9688-ed76b44aee7c.jpg[/img]

自动生成代码

用户和部门实体


//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool
// Changes to this file will be lost if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace AbractFactory
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

public class Department
{
public virtual int ID
{
get;
set;
}

public virtual string DepartmentName
{
get;
set;
}

}
}


//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool
// Changes to this file will be lost if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace AbractFactory
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

public class User
{
public virtual int ID
{
get;
set;
}

public virtual string UserName
{
get;
set;
}

}
}




用户操作契约:

//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool
// Changes to this file will be lost if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace AbractFactory
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

public interface IUser
{
void InsertUser(User user);

User GetUser(int id);

}
}


部门操作契约(接口)

//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool
// Changes to this file will be lost if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace AbractFactory
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

public interface IDepartment
{
void InsertDepartment(string departmentName);

Department GetDepartment(int id);

}
}




部门ACCESS操作的实现

//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool
// Changes to this file will be lost if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace AbractFactory
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

public class AccessDepartment : IDepartment
{
public void Insert(Department department)
{
Console.WriteLine("在Access中给Department表增加一条记录");
}

public Department GetDepartment(int id)
{
Console.WriteLine("在Access中根据ID得到Department表一条记录");
return null;
}

}
}





用户ACCESS操作实现类


//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool
// Changes to this file will be lost if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace AbractFactory
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;


class AccessUser : IUser
{
public void Insert(User user)
{
Console.WriteLine("在Access中给User表增加一条记录");
}

public User GetUser(int id)
{
Console.WriteLine("在Access中根据ID得到User表一条记录");
return null;
}
}
}




部门SQL操作类实现

//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool
// Changes to this file will be lost if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace AbractFactory
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

public class SqlserverDepartment : IDepartment
{
public void Insert(Department department)
{
Console.WriteLine("在Sqlserver中给Department表增加一条记录");
}

public Department GetDepartment(int id)
{
Console.WriteLine("在Sqlserver中根据ID得到Department表一条记录");
return null;
}

}
}




用户操作SQL数据实现

//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool
// Changes to this file will be lost if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace AbractFactory
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

public class SqlserverUser : IUser
{
public virtual void InsertUser(User user)
{
throw new System.NotImplementedException();
}

public virtual User GetUser(int id)
{
throw new System.NotImplementedException();
}

}
}






反射方式获得实现


//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool
// Changes to this file will be lost if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace AbractFactory
{
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Reflection;
using System.Text;

public class DataAccess
{
private static readonly string AssemblyName = "抽象工厂模式";
private static readonly string db = ConfigurationManager.AppSettings["DB"];
public virtual IDepartment IDepartment
{
get;
set;
}

public virtual IUser IUser
{
get;
set;
}

public virtual void CreateUser()
{
string className = AssemblyName + "." + db + "User";
IUser= (IUser)Assembly.Load(AssemblyName).CreateInstance(className);
}

public virtual void CreateDepartment()
{
string className = AssemblyName + "." + db + "Department";
IDepartment= (IDepartment)Assembly.Load(AssemblyName).CreateInstance(className);
}

}
}





调用


using AbractFactory;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DesginPatternLib.GeneratedCode
{
class Class1
{

static void Main(string[] args)
{
User user = new User();
Department dept = new Department();

DataAccess da = new DataAccess();
IUser iu = da.IUser;

iu.InsertUser(user);

iu.GetUser(1);
IDepartment id = da.IDepartment;
id.InsertDepartment(dept);
id.GetDepartment(1);

Console.Read();
}
}
}



意图:
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

适用性:
1.一个系统要独立于它的产品的创建、组合和表示时.
2.一个系统要由多个产品系列中的一个来配置时.
3.当你要强调一系列相关的产品对象的设计以便进行联合使用时。
4.当你提供一个产品类库,而只想显示它们的接口而不是实现时。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值