图解抽象工厂,简单理解
具体说明项目需求,如果不知道客户使用哪种数据库,我们能用简单工厂实现,这里就用sqlserver和oracle为例,当然还可以加上其他数据库
图一:共5个项目,没包括应用层

图二:IDAL是接口层,定义需要要实现的方法,具体实现由SqlServerDAL和OracleDAL实现
SqlServerDAL和OracleDAL都引用IDAL

图三:导入命名空间IDAL,继承接口层对于的类,并实现接口(有快捷键)
这里以sqlserver为例,具体方法的实现就不写了,oracle同理

图四:现在我们可以创建抽象类了,引用IDAL,OracleDAL,SqlServerDAL

图五:导入命名空间IDAL,首先创建抽象产品
抽象产品:就是IDAL接口类中的所有接口类(图二),命名规则以下图为例

图六:创建两具体工厂(图四),这里以sqlserver为例,oracle同理

图七:导入命名空间SqlServerDAL(如为oracle则导入命名空间OracleDAL),并继承抽象类AbstractFactory
实现抽象类AbstractFactory,是什么类就实现什么产品(SqlServerDAL中的类)

图八:以上七图抽象工厂就建好了,那还有问题就是如何知道客户用的哪个数据库呢
处理方法是,一般把选择的东西放在配置文件中,我们创建<appSettings>
图九:既然数据库已经确定,我们就在抽象工厂AbstractFactory判断选择的哪个数据库
在刚刚创建抽象产品的下面创建选择具体工厂(图四中的两个工厂类)的方法


图十:在业务逻辑层调用,引用AbstractFactory和IDAL

图十一:导入命名空间AbstractFactory和IDAL
我们就拿AdminManager业务类分析
导入AbstractFactory和IDAL,创建抽象工厂,命名factory ,注意:此处一定要有static修饰,要不然调用不到下面的方法
为了抽象工厂的使用,所有抽象工厂中选择具体的工厂的方法也是用static修饰的
现在我们就直接能用factory调用到我们想要的数据库类了(它会直接通过配置文件中填入的DBType的值选择相应的数据库实例)
具体实现代码跟没有抽象工厂的写法一样,此处就不写了


浙公网安备 33010602011771号