Asp.net的抽象工厂模式
来源:互联网 发布:繁体字翻译简体字软件 编辑:程序博客网 时间:2024/05/07 21:17
为什么要使用工厂模式呢?首先先说一下工厂模式的一个特点吧!
- 工厂模式可以将模块解耦,在一定程度上使得维护与修改、包括测试都带来了不少方便;
由于工厂模式有如此强大之处,那么必有它的使用之地。在平常的说法中,工厂模式分为两种:一、简单工厂模式;二、抽象工厂模式。下面一一把这两个说清楚。
- 简单工厂模式
简单工厂模式,显而易知,它只是使用到工厂,但是没有做其他优化的工作。下面举一个例子来说明:
假设一个项目只有三层(UI、BLL、DAL),BLL层里面有几个类,如下图:
在这里只说BLL层的工厂,其他的自己按照这思路想想。
那么在BLLFactory.cs中定义了一些获取对象的方法,但是这种方法非常的频繁的读取配置文件,因为每读取一个对象都要读取一次配置文件,并且都要我们亲手的new一个工厂才可以获取其内对象,另外,如果该项目中所用的到数据库的表非常之多的话,那么下面的case就是一个不小的数目了,因此,要用到抽象工厂优化。代码如下:
public class BLLFactory { //1.读取配置文件 string strType = System.Configuration.ConfigurationManager.AppSettings["bllUserType"]; public IBLL.IUser GetIUser() { //2.根据 配置文件值,产生不同的 业务类对象,返回 switch (strType) { case "BLLA": return new BLL.User(); case "BLLB": return new BLLB.User(); default : return null; } } public IBLL.IDog GetIDog() { switch (strType) { case "BLLA": return new BLL.Dog(); case "BLLB": return new BLLB.Dog(); } return null; } }2、抽象工厂模式
抽象工厂模式可以在一定程度上将代码解耦,并且也解决了简单工厂模式所遇到的问题。
我们在以上的BLL工厂类库中定义多了一个抽象工厂,这个抽象工厂是让子工厂继承,而且读取配置文件的工作就交给这个抽象工厂进行处理,同时,在抽象工厂中取对象时非常的方便,因为每次都是取出一个子工厂,而这个子工厂包含了所有的所需对象。抽象工厂代码如下:
public abstract class AbsBLLFactory { /// <summary> /// 根据配置文件 返回 不同的 实体业务工厂 /// </summary> /// <returns></returns> public static AbsBLLFactory GetFactory() { string strType = System.Configuration.ConfigurationManager.AppSettings["factoryType"]; switch (strType) { case "A": return new BLLFactoryA(); case "B": return new BLLFactoryB(); default: return null; } } //定义 工厂方法,等待不同的实体 工厂实现 public abstract IBLL.IUser GetIUser(); public abstract IBLL.IDog GetIDog(); }最后,在UI层调用BLL层相应的工厂时,代码就是那么抽象,快捷。维护时也不需要改,而只需要改以下读取配置文件的那个名字就行 。UI层调用代码:
//创建工厂对象 BLLFactory.AbsBLLFactory bllFac = BLLFactory.AbsBLLFactory.GetFactory(); //1.创建业务层 用户操作接口 对象 IBLL.IUser iuser = bllFac.GetIUser();//new BLLA.User(); List<object> list = iuser.GetUsers(); //2.也可以直接 通过工厂 获取 业务层 其它 类的对象,不需要再次 读取配置文件 IBLL.IDog idog = bllFac.GetIDog();
如果维护、修改使用不同的工厂时,可以改抽象工厂这里:string strType = System.Configuration.ConfigurationManager.AppSettings["factoryType"];也可以一起改配置文件里的:
<appSettings> <add key="webpages:Version" value="2.0.0.0" /> <add key="webpages:Enabled" value="false" /> <add key="PreserveLoginUrl" value="true" /> <add key="ClientValidationEnabled" value="true" /> <add key="UnobtrusiveJavaScriptEnabled" value="true" /> <!--用户配置--> <add key="bllUserType" value="BLLB" /> <!-- BLLB --> <add key="factoryType" value="A" /> <!--A,B--> <add key="dalFacType" value="B" /> <!--A,B--> <!-- BLLB --> </appSettings>
0 0
- Asp.net的抽象工厂模式
- ASP.NET:就抽象工厂模式的一些说明…
- 介绍ASP.NET抽象工厂模式概念
- 介绍ASP.NET抽象工厂模式概念
- 介绍ASP.NET抽象工厂模式概念
- 抽象工厂模式:实现ASP.NET访问不同数据库
- 抽象工厂模式:实现ASP.NET访问不同数据库
- ASP.NET 工厂模式
- Asp.net 工厂模式的应用讲解
- Asp.net 工厂模式的应用讲解
- NET设计模式(3): 抽象工厂模式
- .NET设计模式(3): 抽象工厂模式
- .NET设计模式(3): 抽象工厂模式
- .NET设计模式(3): 抽象工厂模式
- .NET设计模式(3): 抽象工厂模式
- .NET设计模式(3): 抽象工厂模式
- .NET设计模式(3): 抽象工厂模式
- .NET设计模式(3): 抽象工厂模式
- hibernate中update和saveOrUpdate的区别
- 信号处理算法方向的一些SCI杂志(他人经验)
- lua入门之四:lua调用c/c++库(函数压栈方式)
- windbg实战寻找加密API(一)
- php变量学习总结
- Asp.net的抽象工厂模式
- 如何保持旺盛的精力 张锡纯的“元气诠” 关于静坐 修行的方法
- poj1753 Flip Game
- 改善Objective-C的日志输出
- ubuntu下编译ffmpeg 并单步调试
- Lucene开发实例教程:Lucene中文分词、分页查询、高亮显示
- 穿线测试理念介绍V1.0版
- ibatis Cause: com.microsoft.sqlserver.jdbc.SQLServerException: '@P0' 附近有语法错误
- Spring 自动装配AutoWire