总结抽象工厂模式(Abstract Factory):提供一个创建一系列相关或相互依赖对象的接口,而无需制定他们的具体类。结构图如下:
@H_403_12@
分析一下抽象工厂模式,1提供一系列相互依赖对象的创建工作 2 封装对象常规的创建方法 3 提供统一调用数据访问的方式 4 避免调用数据访问方法和具体创建工作。针对上图进行详细分析:
AbstractProductA 和AbstractProductB是两个抽象产品,之所以抽象,是因为他们都有可能有两种不同的实现,而ProductA1,ProductA2 和ProductB1 ,ProductB2就是对两个抽象产品的具体分类的实现,比如在访问数据时,ProductA1可以比作为sqlServer 访问某张表,ProductB1 则可为Access访问该表。
AbstractFactory 是一个抽象工厂类或者一个抽象工厂接口,它里面应该包含所有的产品的抽象方法。而ConcreteFactory1和ConcreteFactory2 就是具体工厂,就像sqlserverFactory 和AccessFactory一样。
通常在运行到的时候创建一个ConcreteFactory类的实例,这个具体共创再创建具有特定实现的产品对象,也就是说,为创建不同的产品对象,,客户端应使用不同的具体工厂。
2 抽象工厂的职责通过上述的详细分析,可以的出抽象工厂模式中的各个对象的主要功能,职责
1. 用抽象工厂生产抽象产品
2.用实体工厂生产实体产品
3 .用抽象产品提供实体产品访问接口
4.用实体产品实现自己的功能
3抽象工厂模式实现三层架构之数据访问层1 搭建项目,如图
@H_403_12@2 项目的依赖关系,根据依赖关系,添加引用(如果连引用都不会添加,建议先学习一下基础知识再来学习设计模式)
@H_403_12@
@H_403_12@
3 实现数据访问接口
3.1定义接口:IadminService.cs,代码如下:
public interface IadminService { //检测登录用户是否存在 bool Checkadmin(int ID,string pwd); }
3.2实现接口:将接口的实现分为三种sql Server 、Access 和Oracle。仅介绍sqlServer的实现,其他的代码在文章末尾,附上本例源代码的下载地址。
public class adminService : IadminService { #region IadminService 成员 private string connstr = @"Data Source=SUNliKE\sqlEXPRESS;Initial Catalog=blank;Persist Security Info=True;User ID=sa;Password=sa"; private sqlConnection conn = new sqlConnection(); private voID open() { if (conn.State == ConnectionState.Closed) { conn.ConnectionString = connstr; conn.open(); return; } if (conn.State == ConnectionState.Open) { return; } } public bool Checkadmin(int ID,string pwd) { open(); sqlCommand cmd = new sqlCommand(); cmd.Connection = conn; cmd.CommandType = CommandType.Text; cmd.CommandText = "select * from guanli where username = '"+ID+"' and password = '"+pwd +"';"; object result = cmd.ExecuteScalar(); if (conn.State == ConnectionState.Open) conn.Close(); return result != null ? true : false; } #endregion }
4 实现数据访问层对象创建功能4.1 编码实现:在抽象工厂(AbstractDALFactory)中用抽象方法提供数据访问对象的创建。
public abstract IadminService CreateadminService();//抽象工厂提供抽象产品4.2 选择实体工厂,没用到反射,其实应该用到反射,这里使用简单的开关语句,便于理解,以后会附上反射的代码,请关注
public static AbstractDALFactory ChooseFactory() { string dbType = ConfigurationManager.AppSettings["DBType"].ToString(); AbstractDALFactory factory = null; switch(dbType) { case "sql": factory = new sqlDALFactory(); break; case "Access": factory = new AccessDALFactory(); break; case "Oracle": factory = new OracleDALFactory(); break; } return factory; }
5 通过实体工厂实现数据访问对象的创建,这里仅给出sql server的代码,其他代码见文章末尾的源代码下载连接地址,谢谢public class sqlDALFactory : AbstractDALFactory { public overrIDe IadminService CreateadminService() { return new adminService(); } }
6 业务逻辑层(BLL)调用数据访问层方法public class adminHandle { //选择实体工厂 private static AbstractDALFactory factory = AbstractDALFactory.ChooseFactory(); //创建数据访问对象 private static IadminService adminService = factory.CreateadminService(); public bool Checkadmin(admin admin) { return adminService.Checkadmin(admin.ID,admin.Password); } #region 其他方法 #endregion }7 用户界面层(UIL)中的测试代码,如下
admin admin = new admin(int.Parse(tbname.Text),tbPwd.Text); bool isOK = false; adminHandle adminHandle = new adminHandle(); isOK = adminHandle.Checkadmin(admin); if (isOK) MessageBox.Show("登录成功"); else MessageBox.Show("登录失败");
8 介绍一下三层架构的系统构架数据访问层:DALFactory,IDAL,DAL三个项目,业务逻辑层:Model 和BLL两个项目,表示层:UIL一个项目。
其中数据访问层的DAL可以访问sqlServer、Access、Oracle 等其他数据库。
4 抽象工厂模式的优缺点优点:易于交换产品系列,如果更换数据库,只需要在App.config的配置文件中的<add key="DBType" value="Access"/>稍作修改,便可完成数据库的更换,而不要更该代码。
缺点:如果项目的需求更换,增添了某张数据表,则需要在相应的DAL增添三个类,IDAL增添一个接口,IDAL的三个实体工厂中增添相应的三个函数,BLL增添一个类,Model增添一个实体,改动比较大。
5 抽象工厂模式实现三层架构之数据访问层源代码说明,下载该资源收您1个资源分,算是对我的尊重和对我劳动果实的回报吧,谢谢您的下载,也谢谢您的访问,如有疑问,请留言,不胜感激。
下载链接:http://download.csdn.net/source/3490633
以上是内存溢出为你收集整理的设计模式学习之抽象工厂模式(实现数据访问层)全部内容,希望文章能够帮你解决设计模式学习之抽象工厂模式(实现数据访问层)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)