DALFactory抽象工厂理解
我觉得要正确理解DALFactory.DataAccess这个函数,就先得理解什么事抽象工厂,设计模式自己没有学过。只是非常粗劣看了一下。
抽象工厂的定义是这样的:提供一个创建一系列相关或相互依赖的接口,而无需指定它们具体的类。
如果是从字面上的理解应该是给上一层或调用者提供一系列的功能的接口,让上层或调用者自己去实现。
petshop是采用“面向接口”的思想。具体点(我也只知道这个例子吧)ICategory cg=new Category()。这是对接口的实现吧。
在网上找了很久找抽象工厂,但是还是不太理解。有人说,抽象工厂就是:
A厂生产鸡蛋,B生产面包,C生产奶油
但你要的是蛋糕,这样就要一个D厂了,D就是专门生产蛋糕的。你要蛋糕就不必去找ABC了,你就直接找D,
你也不必知道D的蛋糕是怎样做成的。
现在我只知道petshop的DALFactory抽象工厂的好处,DALFactory是通过配置文件和放射机制实现SQLServerDAL或QracleDAL
的实例化,当然这个实现是通过多态机制来实现的。这样的好处就是如果要更换数据库的换,就只需要更改配置文件了。
但想想当初学习牛腩的新闻发布系统的时候,我设计的三层基本就是更牛腩的差不多,没有设计IDAL这样的接口,
所以就业不需要DALFactory这样的抽象工厂了。我在BLL层调用的时候就直接引用DAL层就可以了。
但是petshop的抽象工厂模式如果BLL层要引用的话,就要对IDAL和DALfactory添加引用了。
/**********************************************************************************************/
今天下午网上找到了一个传说中很经典的抽象工厂图,就存下来了,具体是:
但是,没有人按照这个对petshop进行分析,我就自己对DALFactory进行了分析,只是不知道是否正确,
先记下,以后如果发现错误了再改:
/**********************************************/
AbstractFactory----->DALFactory
ConcreteFactory----->SQLServerDAL、OracleDAL(后面修改后的,如果没有加上的话就是简单工厂模式而不是抽象工厂了)
Product----->category,Iventory,Item,Order,Produce.
AbstractProduct----->IDAL
Client----->BLL
/************************************************/
再结合上面那个买蛋糕的说法,如果套下去就是:
Client---->要买蛋糕的人
DALFactory---->D
ConcreteFactory---->A,B,C
感觉理解起来挺顺的。
说说抽象工厂的好处吧,上面有谈到我对petshop和牛腩新闻发布系统的比较。感觉自己还没有真正发现他的优势。