1. 抽象模式是工厂模式的升级,可以说工厂模式是抽象模式的特例,但是工厂模式和抽象模式仍然是各自有各自的适应范围,不代表工厂模式可以适用的,抽象模式就更好。
2. 这里我们构建一个案例,未知品牌的数据库的操作,如可能是对MySQL, Oracle,等几种不同品牌的数据库的操作。这里由于变化的是品牌,不变的是所需操作,如包括:Connection、Command,以及DataReader等。首先利用工厂模式,具体需要实现的类和函数大致如下:
2.1 这里可以看到只要外界传入指定品牌的相应的工厂类即可,如MSQlConnectionFactory,MSQlCommandFactory,MSQlReaderFactory等,将传入的子类依次赋值给Employee
类即可,这样后续就可以进行GetEmployees
的函数操作。
2.2 但是这里存在一个问题,如果上一级程序员传入了MySQl的MSQlCommandFactory
给用户类的commanFactory
,但是connectionFactory
却传入的是Oracle的OracleConnectionFactory
,这样就会造成操作的对象不一致。这里就引出抽象工厂,即把所有操作包括在一个工厂里,这样只要传入的是一个指定品牌的工厂,其中相应的函数返回类就不会再串用。
3. 总结
- 对于多系列对象的同一类操作,则存在稳定中有变化,变化中有稳定,需要借鉴抽象模式;
- 但是对于只操作一个系列的对象,那只需要工厂模式即可。