设计模式之抽象工厂模式(可用于项目实战)
来源:互联网 发布:java命令运行jar包 编辑:程序博客网 时间:2024/06/07 03:46
1、举例:
有两个表:User表,Department表,使用抽象工厂模式完成项目的开发,该项目数据库可能是SqlServer或者Oracle,可以很方便的进行数据库移植
(1)首先新建一个Entity文件夹,里面存储反应数据库中表的业务实体类
/// <summary>
/// User表
/// </summary>
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public string Sex { get; set; }
public int Age { get; set; }
}
/// <summary>
/// 部门表
/// </summary>
public class Department
{
public int Id { get; set; }
public string DepartName { get; set; }
}
(2)新建一个Interface文件夹,里面存储接口,包括对业务实体进行操作的接口
/// User表
/// </summary>
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public string Sex { get; set; }
public int Age { get; set; }
}
/// <summary>
/// 部门表
/// </summary>
public class Department
{
public int Id { get; set; }
public string DepartName { get; set; }
}
(2)新建一个Interface文件夹,里面存储接口,包括对业务实体进行操作的接口
/// <summary>
/// 用户表的操作接口(与操作的数据库解耦)
/// </summary>
public interface IUser
{
void Insert(User user);
void Delete(int id);
void Update(User user);
User GetUserById(int id);
List<User> GetUsers();
}
/// <summary>
/// 部门操作接口(与操作的数据库解耦)
/// </summary>
public interface IDepartment
{
void Insert(Department department);
void Delete(int id);
void Update(Department department);
Department GetDepartmentById(int id);
List<Department> GetDepartments();
}
(3)创建两个文件夹Oracle和SqlServer,里面存储使用不同数据库操作业务实体的数据访问,继承业务实体操作接口
例如:SqlServer文件夹(Oracle一样)
/// 用户表的操作接口(与操作的数据库解耦)
/// </summary>
public interface IUser
{
void Insert(User user);
void Delete(int id);
void Update(User user);
User GetUserById(int id);
List<User> GetUsers();
}
/// <summary>
/// 部门操作接口(与操作的数据库解耦)
/// </summary>
public interface IDepartment
{
void Insert(Department department);
void Delete(int id);
void Update(Department department);
Department GetDepartmentById(int id);
List<Department> GetDepartments();
}
(3)创建两个文件夹Oracle和SqlServer,里面存储使用不同数据库操作业务实体的数据访问,继承业务实体操作接口
例如:SqlServer文件夹(Oracle一样)
/// <summary>
/// 使用SqlServe数据库操作User表
/// </summary>
public class SqlServerUser:IUser
{
public void Insert(User user)
{
Console.WriteLine("使用Sql Server数据库新增一条User记录");
}
public void Delete(int id)
{
Console.WriteLine("使用Sql Server数据库删除Id为{0}的一条User记录",id);
}
public void Update(User user)
{
Console.WriteLine("使用Sql Server数据库更新Id为{0}的一条User记录",user.Id);
}
public User GetUserById(int id)
{
Console.WriteLine("使用Sql Server数据库获取Id为{0}的一条User记录",id);
return new User();
}
public List<User> GetUsers()
{
Console.WriteLine("使用Sql Server数据库获取User记录");
return new List<User>();
}
}
/// <summary>
/// 使用SqlServe数据库操作Department表
/// </summary>
public class SqlServerDepartment:IDepartment
{
public void Insert(Department department)
{
Console.WriteLine("使用Sql Server数据库新增一条Department记录");
}
public void Delete(int id)
{
Console.WriteLine("使用Sql Server数据库删除Id为{0}的一条Department记录", id);
}
public void Update(Department department)
{
Console.WriteLine("使用Sql Server数据库更新Id为{0}的一条Department记录", department.Id);
}
public Department GetDepartmentById(int id)
{
Console.WriteLine("使用Sql Server数据库获取Id为{0}的一条Department记录", id);
return new Department();
}
public List<Department> GetDepartments()
{
Console.WriteLine("使用Sql Server数据库获取department记录");
return new List<Department>();
}
}
(4)为了方便用户使用,创建Ifactory接口,放在Inteface文件夹中
/// 使用SqlServe数据库操作User表
/// </summary>
public class SqlServerUser:IUser
{
public void Insert(User user)
{
Console.WriteLine("使用Sql Server数据库新增一条User记录");
}
public void Delete(int id)
{
Console.WriteLine("使用Sql Server数据库删除Id为{0}的一条User记录",id);
}
public void Update(User user)
{
Console.WriteLine("使用Sql Server数据库更新Id为{0}的一条User记录",user.Id);
}
public User GetUserById(int id)
{
Console.WriteLine("使用Sql Server数据库获取Id为{0}的一条User记录",id);
return new User();
}
public List<User> GetUsers()
{
Console.WriteLine("使用Sql Server数据库获取User记录");
return new List<User>();
}
}
/// <summary>
/// 使用SqlServe数据库操作Department表
/// </summary>
public class SqlServerDepartment:IDepartment
{
public void Insert(Department department)
{
Console.WriteLine("使用Sql Server数据库新增一条Department记录");
}
public void Delete(int id)
{
Console.WriteLine("使用Sql Server数据库删除Id为{0}的一条Department记录", id);
}
public void Update(Department department)
{
Console.WriteLine("使用Sql Server数据库更新Id为{0}的一条Department记录", department.Id);
}
public Department GetDepartmentById(int id)
{
Console.WriteLine("使用Sql Server数据库获取Id为{0}的一条Department记录", id);
return new Department();
}
public List<Department> GetDepartments()
{
Console.WriteLine("使用Sql Server数据库获取department记录");
return new List<Department>();
}
}
(4)为了方便用户使用,创建Ifactory接口,放在Inteface文件夹中
/// <summary>
/// 抽象工厂类
/// </summary>
public interface IFactory
{
IUser CreateUserOpt();
IDepartment CreateDepartmentOpt();
}
(5)新建一个Factory文件夹,创建Oracle和SqlServer工厂,返回不同的对象
/// 抽象工厂类
/// </summary>
public interface IFactory
{
IUser CreateUserOpt();
IDepartment CreateDepartmentOpt();
}
(5)新建一个Factory文件夹,创建Oracle和SqlServer工厂,返回不同的对象
/// <summary>
/// Oracle工厂类
/// </summary>
public class OracleFactory:IFactory
{
public IUser CreateUserOpt()
{
return new OracleUser();
}
public IDepartment CreateDepartmentOpt()
{
return new OracleDepartment();
}
}
/// <summary>
/// SqlServer工厂类
/// </summary>
public class SqlServerFactory:IFactory
{
public IUser CreateUserOpt()
{
return new SqlServerUser();
}
public IDepartment CreateDepartmentOpt()
{
return new SqlServerDepartment();
}
}
(6)客户端调用
/// Oracle工厂类
/// </summary>
public class OracleFactory:IFactory
{
public IUser CreateUserOpt()
{
return new OracleUser();
}
public IDepartment CreateDepartmentOpt()
{
return new OracleDepartment();
}
}
/// <summary>
/// SqlServer工厂类
/// </summary>
public class SqlServerFactory:IFactory
{
public IUser CreateUserOpt()
{
return new SqlServerUser();
}
public IDepartment CreateDepartmentOpt()
{
return new SqlServerDepartment();
}
}
(6)客户端调用
DevelopModel.IFactory_table.IFactory factory = newDevelopModel.IFactory_table.OracleFactory();
DevelopModel.IFactory_table.IUser userOpt= factory.CreateUserOpt();
DevelopModel.IFactory_table.IDepartment departmentOpt = factory.CreateDepartmentOpt();
userOpt.Insert(new DevelopModel.IFactory_table.User());
userOpt.Delete(1);
userOpt.Update(new DevelopModel.IFactory_table.User());
userOpt.GetUserById(7);
userOpt.GetUsers();
departmentOpt.Insert(new DevelopModel.IFactory_table.Department());
departmentOpt.Delete(1);
departmentOpt.Update(new DevelopModel.IFactory_table.Department());
departmentOpt.GetDepartmentById(7);
departmentOpt.GetDepartments();
如果把数据库移植到SqlServer上,只需要更改红色部分的工厂类为SqlServerFactory即可
DevelopModel.IFactory_table.IUser userOpt= factory.CreateUserOpt();
DevelopModel.IFactory_table.IDepartment departmentOpt = factory.CreateDepartmentOpt();
userOpt.Insert(new DevelopModel.IFactory_table.User());
userOpt.Delete(1);
userOpt.Update(new DevelopModel.IFactory_table.User());
userOpt.GetUserById(7);
userOpt.GetUsers();
departmentOpt.Insert(new DevelopModel.IFactory_table.Department());
departmentOpt.Delete(1);
departmentOpt.Update(new DevelopModel.IFactory_table.Department());
departmentOpt.GetDepartmentById(7);
departmentOpt.GetDepartments();
如果把数据库移植到SqlServer上,只需要更改红色部分的工厂类为SqlServerFactory即可
0 0
- 设计模式之抽象工厂模式(可用于项目实战)
- 实战设计模式之抽象工厂
- 设计模式之工厂模式系列(简单工厂,工厂模式,抽象工厂模式)
- 设计模式之Factory(工厂模式,抽象工厂)
- 24种设计模式之工厂模式--(抽象工厂)
- 设计模式之抽象工厂
- 设计模式 之 抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- 设计模式之-抽象工厂
- 设计模式之抽象工厂
- 设计模式之抽象工厂
- uva 111 History Grading(动态规划:LCS)
- 新浪API(Java)使用方法
- 织梦DedeCms系统标签autoindex和itemindex用法说明
- Uva 11021 Tribles
- linux下音乐播放器wav和mp3
- 设计模式之抽象工厂模式(可用于项目实战)
- oralce对用户的解锁和改密码
- DTU+TCP+udp转+GRidvis
- fdgjhgfjgj
- 动态代理类的创建实例
- 感觉后付款后公开
- 电饭锅活佛济公
- 冒泡排
- 大股东福建后房管局