11-抽象工厂模式
2023-09-30 22:59:27 0 举报
设计模式,抽象工厂模式,设计模式UML类图,GOF23种设计模式
作者其他创作
大纲/内容
抽象工厂模式(Abstract Factory)结构图
抽象产品,它们都有可能有两种不同的实现
<<接口>>AbstractProductB
ProductA1
ProductB2
简单工厂改进后还是不完美,原因是如果需要增加Oracle数据库访问,本来抽象工厂只需要增加OracleFactory工厂类就可以了,现在就比较麻烦了。需要在DataAccess类中每个方法的switch中加case了。所以再改进就是:依赖注入 反射+配置文件 完美解决反射+配置文件,将来更换数据库,根本无须从新编译任何代码,只需要更改配置文件就好了。从这个角度上说,所有在用简单工厂的地方,都可以考虑用反射技术来去除switch或if,解除分支判断带来的耦合。
ProductA2
Client
抽象工厂接口,它里面应该包含所有产品创建的方法
用简单工厂改进抽象工厂
抽象工厂的好处1、最大的好处就是易于交换产品系列,由于具体工厂类,例如IFactory factory=new MysqlFactory(),在一个应用中只需要在初始化的时候出现一次,这就使得改变一个应用的具体工厂变得非常容易,它只需要改变具体工厂即可使用不同的产品配置。2、它让具体的创建实例过程与客户端分离,客户端是通过它们的抽象接口操纵实例,产品的具体类名也被具体工厂的实现分离,不会出现在客户代码中。
DataAccess
-db:String
+ createProductA():IProductA+ createProductB():IProductB
<<接口>>IProductA
ProductB1
抽象工厂模式缺点:客户端会有很多地方使用IProductA,IProductB,而这样的设计,其实在每个类的开始都徐亚声明IFactory factory=new MysqlFactory(),如果有100个调用数据库访问的类,那全都得改,所以使用简单工厂改进抽象工厂
<<接口>>AbstractProductA
ConcreteFactory2
+ createProductA()+ createProductB()
<<接口>>AbstractFactory
具体的工厂,创建具有特定实现的产品对象
<<接口>>IProductB
对两个抽象产品的具体分类实现
ConcreteFactory1
0 条评论
下一页