大话设计模式-抽象工厂模式
Posted errornull
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大话设计模式-抽象工厂模式相关的知识,希望对你有一定的参考价值。
抽象工厂模式
抽象工厂模式提供一个创建一系列相关或互相依赖的接口,而无需再指定他们具体的类。
最大的好处是易于交换产品系列,由于具体工厂类在一个应用中只需要在初始化的时候出现一次,这使得改变一个应用的具体工厂变得非常容易,他只需要改变具体工厂即可使用不同的产品配置。
他让具体的创建实例过程与客户端分离,客户端是通过它们的抽象接口操纵实例,产品的具体类名也被具体工厂的实现分离,不会出现在客户代码中。
访问数据库
数据类:User/Department
class User{ public int ID { get; set; } public string Name { get; set; } } class Department{ public int ID { get; set; } public string Name { get; set; } }
数据接口:IUser/IDepartment
用于客户端访问,解除与具体数据库访问的耦合。
interface IUser{ void Insert(User user); void GetUser(int id); } interface IDepartment{ void Insert(Department department); void GetDepartment(int id); }
接口实现类:MySQL/SQLServer User/Department
分别实现mysql和SQLServer两种数据库的对用户表和部门表的数据操作。每种表的操作封装在一个类中。
class SQLServerUser : IUser { public void Insert(User user) => Console.WriteLine("在SQLServer中给User表插入一条记录"); public void GetUser(int id) => Console.WriteLine("在SQLServer中根据ID查询User表得到一条记录"); } class MySQLUser : IUser { public void Insert(User user) => Console.WriteLine("在MySQL中给User表插入一条记录"); public void GetUser(int id) => Console.WriteLine("在MySQL中根据ID查询查询User表得到一条记录"); } class SQLServerDepartment : IDepartment { public void Insert(Department department) => Console.WriteLine("在SQLServer中给Department表插入一条记录"); public void GetDepartment(int id) => Console.WriteLine("在SQLServer中根据ID查询Department表得到一条记录"); } class MySQLDepartment : IDepartment { public void Insert(Department department) => Console.WriteLine("在MySQL中给Department表插入一条记录"); public void GetDepartment(int id) => Console.WriteLine("在MySQL中根据ID查询Department表得到一条记录"); }
工厂接口:IFactory
声明了创建不同数据库都要实现的方法
interface IFactory { IUser CreateUser(); IDepartment CreateDepartment(); }
具体工厂类:MySQL/SQLServer Factory
为不同数据库创建对应的对表的操作封装的类的实例。
class SQLServerFactory : IFactory{ public IUser CreateUser() => new SQLServerUser(); public IDepartment CreateDepartment() => new SQLServerDepartment(); } class MySQLFactory : IFactory{ public IUser CreateUser() => new MySQLUser(); public IDepartment CreateDepartment() => new MySQLDepartment(); }
测试类:Program
//声明工厂,选择SQLServer工厂 IFactory factory = new SQLServerFactory(); //声明用户数据类,创建SQLServer的封装了创建对用户表操作的类的实例 User user = new User(); IUser iuser = factory.CreateUser(); //执行类中封装的对用户表操作的方法 iuser.Insert(user); iuser.GetUser(1); //部门数据类同上 Department department = new Department(); IDepartment idepartment = factory.CreateDepartment(); idepartment.Insert(department); idepartment.GetDepartment(1); //测试结果 在SQLServer中给User表插入一条记录 在SQLServer中根据ID查询User表得到一条记录 在SQLServer中给Department表插入一条记录 在SQLServer中根据ID查询Department表得到一条记录
以上是关于大话设计模式-抽象工厂模式的主要内容,如果未能解决你的问题,请参考以下文章