抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
优点:易于交换产品系列,由于具体工厂类在一个应用中只需要在初始化的时候出现一次,这就使得改变一个应用的具体工厂变得非常容易,只需要改变具体工厂即可使用不同的产品配置。它让具体的创建实例过程与客户端分离,客户端是通过它们的抽象接口操纵实例,产品的具体类名也被具体工厂的实现分离,不会出现在客户代码中。
缺点:增加新功能,产品工厂都要改。100次调用工厂类,则需要改100次。
改进:用简单工厂来改进抽象工厂(但抽象工厂本来增加只需要一个工厂类就可以了,现在需要在每个方法的switich增加case),用反射+抽象工厂的数据访问程序(将程序由编译转为运行时,但还需要改变量),用反射+配置文件实现数据访问程序。
所有在用简单工厂的地方,都可以考虑用反射来消除switch或if,解除分支判断带来的耦合。switch或者if是程序里的好东西,但在应对变化上,却显的老太龙钟。反射技术可以很好地解决它们难以应对变化,难以维护和扩展的诟病。

