.NET抽象工厂模式微理解--教你在项目中实现抽象工厂

  最近在学习MVC,对于MVC里面的一些项目上的东西都和抽象模式有关,今天就微说明一下个人对于抽象工厂模式的理解,以方便学习MVC及工厂模式相关的同事和博友们理解。不足之处,还请斧正!

  首先简单阐述一些三层的关系,相信观看该文章的博友们对于三层设计早已经是烂熟于心了,我这边就简单说明一下:
用户界面表示层(Web)
业务逻辑层(BLL)
数据访问层(DAL)
    1:数据数据访问层:主要是对原始数据(数据库或者文本文件等存放数据的形式)的操作层,而不是指原始数据,也就是说,是对数据的操作,而不是数据库,具体为业务逻辑层或表示层提供数据服务.
    2:业务逻辑层:主要是针对具体的问题的操作,也可以理解成对数据层的操作,对数据业务逻辑处理,如果说数据层是积木,那逻辑层就是对这些积木的搭建。
    3:表示层:主要表示WEB方式,也可以表示成WINFORM方式,WEB方式也可以表现成:aspx, 如果逻辑层相当强大和完善,无论表现层如何定义和更改,逻辑层都能完善地提供服务。
  下面阐述一些抽象工厂模式的作用,请看图(该图为我一个老师所画,在这里给大家简单看一下) 

OK,言归正传,我们来跟着项目做一个抽象工厂模式的demo
下面新建一个解决方案:如下图:

他们之间的描述及引用关系如下:
AXCModel层:实体类层
AXCDAL层:数据访问层
IAXCDAL层:数据访问层接口
AXCFactoryDAL层:数据访问工厂设计
AXCBLL层:业务逻辑层
IAXCBLL层:业务逻辑层接口
AXCFactory层:业务逻辑层工厂设计
AXCWeb层:表现层
接口之间的引用关系如下:
IAXCDAL层和IAXCBLL层引用AXCModel层
AXCDAL层引用IAXCDAL层和AXCModel层
AXCBLL层引用AXCFactoryDAL层和IAXCBLL层和IAXCDAL层和AXCModel层
工厂之间的引用:
AXCFactoryDAL层引用AXCDAL层和IAXCDAL层
AXCFactory层引用AXCBLL层和IAXCBLL层
表现层引用:
AXCWeb层引用AXCFactory层和IAXCBLL层和AXCModel层

  下面我们就以一个简单的获取记录条数为功能实现抽象工厂模式:
在AXCModel层里面新建一个PeopleModel类,属性(自动属性)如下:

    public class PeopleModel
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public bool Sex { get; set; }
}

在IAXCDAL层里面新建一个IPeopleDAL类,该类里面的内容是AXCDAL数据访问层里面的接口方法,如下:

    public interface IPeopleDAL
{
List<AXCModel.PeopleModel> getPeopleList();
}

在AXCDAL层里面新建一个PeopleDAL类,继承IPeopleDAL类,该类里面的内容是IAXCDAL层里的具体的方法的实现,如下(由于没有设计数据库,暂时手动代替一下):

    public class PeopleDAL:IAXCDAL.IPeopleDAL
{ public List<AXCModel.PeopleModel> getPeopleList()
{
List<AXCModel.PeopleModel> People = new List<AXCModel.PeopleModel>(){
new AXCModel.PeopleModel(){ Id=1,Name="艾新草",Age=25,Sex=false},
new AXCModel.PeopleModel(){ Id=2,Name="艾新草1",Age=23,Sex=true},
new AXCModel.PeopleModel(){ Id=3,Name="艾新草2",Age=22,Sex=false}
};
return People;
}
}

在AXCFactoryDAL层里新建一个抽象类:AbsFactoryDAL,该类实现了读取配置文件中的配置的数据访问层,方便实现支持多数据库开发,如下,

    public abstract class AbsFactoryDAL
{
/// <summary>
/// 根据配置文件 获取 实体数据工厂 对象
/// </summary>
/// <returns></returns>
public static AbsFactoryDAL GetFatory()
{
string strType = System.Configuration.ConfigurationManager.AppSettings["dalType"].ToString();
AbsFactoryDAL dalFactory = null;
switch (strType)
{
case "dal":
dalFactory = new DALFatory();
break; }
return dalFactory;
}
public abstract IAXCDAL.IPeopleDAL GetPeople();
}

在新建一个DALFatory类,该类继承了AbsFactoryDAL,返回一个具体的数据访问层实例,如下:

    public class DALFatory : AbsFactoryDAL
{ public override IAXCDAL.IPeopleDAL GetPeople()
{
return new AXCDAL.PeopleDAL();
}
}

在IAXCBLL层里面新建一个IPeopleBLL类,该类里面的内容是AXCBLL业务逻辑层里面的接口方法,如下:

    public interface IPeopleBLL
{
List<AXCModel.PeopleModel> getPeopleList();
}

在AXCBLL层里面新建一个PeopleBLL类,继承IPeopleBLL类,该类里面的内容是IAXCBLL层里的具体的方法的业务实现,如下:

    public class PeopleBLL:IAXCBLL.IPeopleBLL
{
// IAXCDAL.IPeopleDAL IPeopleDal =null;
/// <summary>
/// 数据抽象工厂 - 由抽象工厂类的 静态方法创建 : 父类 obj = new 子类();
/// </summary>
AXCFactoryDAL.AbsFactoryDAL absFactoryDAL = AXCFactoryDAL.AbsFactoryDAL.GetFatory(); public List<AXCModel.PeopleModel> getPeopleList()
{
IAXCDAL.IPeopleDAL IPeopleDal = absFactoryDAL.GetPeople();
return IPeopleDal.getPeopleList();
}
}

与在AXCFactoryDAL层里新建工厂差不多,在AXCFactory层里新建一个抽象类:AbsFactoryBLL,该类实现了读取配置文件中的配置的业务逻辑层,方便实现支持多数据库开发多个业务逻辑层,如下,

        /// <summary>
/// 根据配置文件 获取 实体业务工厂 对象
/// </summary>
/// <returns></returns>
public static AbsFactoryBLL GetFatory()
{
string strType = System.Configuration.ConfigurationManager.AppSettings["bllType"].ToString();
AbsFactoryBLL bllFactory = null;
switch (strType)
{
case "bll":
bllFactory = new BLLFatory();
break; }
return bllFactory;
} public abstract IAXCBLL.IPeopleBLL GetPeople();
}

在新建一个BLLFatory类,该类继承了AbsFactoryBLL,返回一个具体的业务逻辑层实例,如下:

    public class BLLFatory :AbsFactoryBLL
{
public override IAXCBLL.IPeopleBLL GetPeople()
{
return new AXCBLL.PeopleBLL();
}
}

好了,基础的工作我们已经完成的差不多了,现在就在web层里配置一下webconfig文件,如下:

   <appSettings>
<add key="bllType" value="bll"/>
<add key="dalType" value="dal"/>
</appSettings>

调用一下我们所写的方法,方法如下:
最好的效果图如下:

好了,以上就是本人对于抽象工厂模式的微理解。希望你看完本文也对抽象模式有一个微理解。

.NET抽象工厂模式微理解--教你在项目中实现抽象工厂的更多相关文章

  1. Java工厂模式解耦 —— 理解Spring IOC

    Java工厂模式解耦 -- 理解Spring IOC 最近看到一个很好的思想来理解Spring IOC,故记录下来. 资源获取方式 主动式:(要什么资源都自己创建) 被动式:(资源的获取不是我们创建, ...

  2. SLAM+语音机器人DIY系列:(二)ROS入门——8.理解roslaunch在大型项目中的作用

    摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机器人“miiboo”中的大部分程序也采用ROS进行开发,所以本文就重点对ROS ...

  3. js对于工厂模式的理解

    有很多人对工厂模式有着这样或者那样不理解的地方,今天我就和大家分享一下我的心得. 其实工厂模式是基于面向对象的一种模式.大家先看这样的一段代码: 其实这个程序很简单,学过js的人都会写,基本没什么问题 ...

  4. Java工厂模式浅析理解

    由于本人缺乏工作经验,本篇文章作为随笔,只是对工厂模式有一个简单的认识 工厂模式分为以下三种: 1:简单工厂(Simple Factory).2:工厂方法(Factory Method).3:抽象工厂 ...

  5. .NET重构(一):抽象工厂模式实现登录

    导读:一路艰辛,我也走到了重构.在重构之前,师傅让用经典三层(UI.BLL.DAL)敲了登录.用户的增删改查,共五条线.从开始对三层的朦胧,到五条线结束,终于对三层有了逻辑上清晰的理解.然后就画了几天 ...

  6. php设计模式总结-工厂模式

    使用工厂模式的目的或目标? 工厂模式的最大优点在于创建对象上面,就是把创建对象的过程封装起来,这样随时可以产生一个新的对象.减少代码进行复制粘帖,耦合关系重,牵一发动其他部分代码. 通俗的说,以前创建 ...

  7. Java EE设计模式(主要简单介绍工厂模式,适配器模式和模板方法模式)

    Java EE设计模式分为三种类型,共23种: 创建型模式:单例模式.抽象工厂模式.建造者模式.工厂模式.原型模式. 结构型模式:适配器模式.桥接模式.装饰模式.组合模式.外观模式.享元模式.代理模式 ...

  8. 在商城系统中使用设计模式----简单工厂模式之在springboot中使用简单工厂模式

    1.前言: 不了解简单工厂模式请先移步:在商城中使用简单工厂.在这里主要是对springboot中使用简单工厂模式进行解析. 2.问题: 什么是简单工厂:它的实现方式是由一个工厂类根据传入的参数,动态 ...

  9. 深入浅出设计模式——抽象工厂模式(Abstract Factory)

    模式动机在工厂方法模式中具体工厂负责生产具体的产品,每一个具体工厂对应一种具体产品,工厂方法也具有唯一性,一般情况下,一个具体工厂中只有一个工厂方法或者一组重载的工厂方法.但是有时候我们需要一个工厂可 ...

随机推荐

  1. 使用iText生成带底图的PDF

    package com.wzh.itext; import com.itextpdf.text.Chunk; import com.itextpdf.text.Document; import com ...

  2. Android窗口管理服务WindowManagerService计算Activity窗口大小的过程分析

    来自http://blog.csdn.net/luoshengyang/article/details/8479101 在Android系统中,Activity窗口的大小是由WindowManager ...

  3. DOS的BAT技巧两则

    一,杀FF进程 二,删除FF产生的配置文件(这个大了,不小心就会爆盘) taskkill /f /t /im firefox.exe for /d %%i in (C:\Users\cheng\App ...

  4. windows批处理命令教程

      批处理文件是无格式的文本文件,它包含一条或多条命令.它的文件扩展名为 .bat 或 .cmd.在命令提示下键入批处理文件的名称,或者双击该批处理文件,系统就会调用Cmd.exe按照该文件中各个命令 ...

  5. Linux企业级项目实践之网络爬虫(19)——epoll接口

    由于要实现爬虫程序的快速抓取,显然如果采用阻塞型的I/O方式,那么系统可能很长时间都处在等待内核响应的状态中,这样爬虫程序将大大地降低效率.然而,如果采用非阻塞I/O,那么就要一直调用应用进程,反复对 ...

  6. Struct2(三) Struct2 标签

    在上一篇 Struct2(二)中,我们新建了工程Struct2test用来验证hello World 程序,在index.jsp中,我们添加了一个Struct2 uri 标签用来创建一个指向hello ...

  7. Oracle Database 12c Using duplicate standby database from active database Created Active DataGuard

    primary database db_name=zwc, db_unique_name=zwc standby database db_name=zwc, db_unique_name=standb ...

  8. java如何从方法返回多个值

    本文介绍三个方法,使java方法返回多个值. 方法1:使用集合类 方法2:使用封装对象 方法3:使用引用传递 示例代码如下: import java.util.HashMap; import java ...

  9. HTML之一天学会html(常用标签+网页架构)

    1.  网页文件的创建 新建一个文本文件,将其命名为xxx.html或者xxx.htm(注意后缀名) 2.  简单的html页面的编写 在网页中都是通过标签来指定相应的显示内容,所有的页面内容都必须在 ...

  10. springmvc4+hibernate4分页查询功能

    Springmvc+hibernate成为现在很多人用的框架整合,最近自己也在学习摸索,由于我们在开发项目中很多项目都用到列表分页功能,在此参考网上一些资料,以springmvc4+hibnerate ...