抽象工厂模式,提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
AbstractProductA和AbstractProductB是两个抽象产品,ProductA1、ProductA2和ProductB1、ProductB2对两个抽象产品的具体分类的实现。
IFactory是一个抽象工厂接口,它里面应该包含所有的产品创建的抽象方法,ConcreteFactory1和ConcreteFactory2就是具体的工厂,通常是在运行时刻再创建一个ConcreteFactory类的实现,这个具体的工厂再创建具有特定实现的产品对象,为创建不同的产品对象,客户端应使用不同的具体工厂。
好处:1.易于交换产品系列
2.具体的创建实例过程与客户端分离
缺点:1.如果增加抽象产品,必须修改所有具体工厂和抽象工厂
2.客户端出现具体工厂,客户端多次用到具体工厂时,修改要多处修改
改进:用简单工厂来改进抽象工厂,每个抽象工厂都可以封装到简单工厂里面,而客户端就不会出现具体工厂的实现。
用反射+抽象工厂的数据访问程序
.Net里面用到 using System.Reflection
Assembly.Load("程序集名称").CreateInstance("命名空间.类名称")
根据运行时修改字符串来确定创建的是哪个具体实例
用反射+配置文件实现数据访问程序
根据以上反射技术来消除工厂模式中的switch或if这样的分支,解除分支判断带来的耦合。使用一个App.config文件来修改连接字符串