ASP.NET工厂方法模式及工厂方法模型探讨
工厂方法模式最大的优势,也就是工厂方法模式和工厂方法模式的区别,就是工厂类包含必要的逻辑判断,并根据客户端的选择条件动态实例化相关类,为客户端去除了对特定产品的依赖。工厂方法模式定义了创建对象的借口,允许子类决定实例化哪个类。工厂方法是将类的实例化延迟到它的子类。其实不难发现,工厂方法模式实现时,客户端需要决定实例化哪个工厂来实现操作类,选择判断的问题依然存在。也就是说把工厂方法的内部逻辑判断移到客户端代码,我想增加一些功能。本来需要修改工厂类,现在只需要修改客户端。下面是我们老师通过一个项目对工厂模型之间差异的简单分析。我大致整理了一下,但是写得不好,仅供参考。现在当我们开发一些web项目或WInform项目时,我们都需要数据库来管理所有的信息。现在,以我开发的一个系统《陇原商城》为例。如果我的系统投入使用,如果我使用的数据库是Access数据库,但是,一段时间后,由于龙源商城的商品非常好,Access数据库很难满足客户的需求。此时,客户希望更改为Sql Server数据库。在这种情况下,我们必须重写代码,并将其更改为Sql Server数据库。如果一段时间过去了,Sql Server数据库无法满足用户的需求,用户此时又想将其改为Oracel数据库,这里就不多说了。也许我们的开发商会带来吐血,从而引起我们的深思。我们如何制作一个系统,这样我们就不需要在这样的麻烦中修改代码?这就涉及到设计模式,于是工厂方法模式就出现了。让我们用工厂方法模式做一个小实验来实现这样一个过程。
新建一个控制台应用程序,命名为工厂方法模式,在控制台中添加一个IProductDAL接口,在里面定义一个方法,实现如下:复制代码代码如下:命名空间FactoryMethodPattern {公共接口iprocentdal { void Insert();} } 然后新建接口实现工厂模式我的工厂,实现如下:复制代码代码如下:命名空间FactoryMethodPattern {公共接口iprocadelfactory { iprocadel createProductDal();} } 接下来在项目中添加类AccessProductDAL,继承自接口IProductDAL,实现的方法是向控制台输出一条信息,实现如下:复制代码代码如下:命名空间FactoryMethodPattern {公共类accessproduct dal : iprocentdal { # region iprocentdal成员公共void Insert() {控制台.WriteLine('AccessProductDAL .插入');} #endregion } }然后创建一个AccessProductDAL的工厂类,使他继承自iprocureddalfactory接口,创建一个方法使其它的返回值为IProductDAL,最后在方法的实现里面返回实例化的AccessProductDAL,实现代码如下: 复制代码代码如下:命名空间FactoryMethodPattern {公共类accessproductdalfactory : iproducdalfactory } #地区iproducdalfactory成员public iprocentdal createProductDal(){返回新的AccessProductDal();} #endregion } }接下来写一下:实现结构化查询语言服务器数据库的方法,添加一个类SqlProductDAL,使其方法输出一句话复制代码代码如下:命名空间工厂方法模式{公共类sqlpproductdal : iprocentdal } #区域iprocentdal成员公共void Insert() {控制台.WriteLine(' sqlpproductdal .插入');} #endregion } }再添加sqlpproductdalfactory类,实现代码如下:复制代码代码如下:命名空间FactoryMethodPattern {公共类sqlpproductdalfactory : iprocentalfactory } # region iprocentalfactory成员public iprocentdal createProductDal(){ 0返回新的sqlpproductdal();} #endregion } }接下来添加App.config文件,来实现系统所选择的数据库是什么数据库,代码如下:复制代码代码如下:可扩展标记语言版本='1.0 '编码='utf-8 '?配置appSettings添加键='DALFactory '值='FactoryMethodPattern .sqlpproductdalfactory//AppSettings/配置在写业务逻辑层BLL,利用反射获取app.config中所选择的路径是什么。读取出来代码如下:复制代码代码如下:命名空间FactoryMethodPattern {公共类BLL {公开作废插入(){ //利用反射实现功能工厂组装GetExecutingAssembly().创建实例(配置管理器AppSettings[' DALFactory ']);IProductDAL pro=工厂createProductDal();专业人士插入();} } } 最后在程序里面读取基地址定位连接层信息,输出信息复制代码代码如下:命名空间工厂方法模式{类程序{静态void main(字符串[]args){ BLL产品=新BLL();产品插入();控制台ReadKey();} } } 最后单击运行显示的输出信息为
现在这个小系统已经整体完成,现在想加入Oracel数据库。我只需要编写两类Oracel数据库并添加到其中,然后在app.config中修改路径即可总结:factory方法克服了简单工厂违反开闭原则的缺点,具有保留创建打包对象过程的优点。工厂方法模式是工厂方法模式的进一步抽象和扩展。由于多态性,工厂方法模式保留了工厂方法模式的优点,克服了它的缺点。
版权声明:ASP.NET工厂方法模式及工厂方法模型探讨是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。