设计模式学习之抽象工厂模式(实现数据访问层)

设计模式学习之抽象工厂模式(实现数据访问层),第1张

概述   1 什么是抽象工厂模式 抽象工厂模式(Abstract Factory):提供一个创建一系列相关或相互依赖对象的接口,而无需制定他们的具体类。结构图如下:   分析一下抽象工厂模式,1提供一系列相互依赖对象的创建工作 2 封装对象常规的创建方法 3 提供统一调用数据访问的方式 4 避免调用数据访问方法和具体创建工作。针对上图进行详细分析: AbstractProductA 和Abstract    1 什么是抽象工厂模式

抽象工厂模式(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

总结

以上是内存溢出为你收集整理的设计模式学习之抽象工厂模式(实现数据访问层)全部内容,希望文章能够帮你解决设计模式学习之抽象工厂模式(实现数据访问层)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1180826.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存