刚开始一直没搞清楚abstract factory 和factory method有什么区别..因为二者常常混在一起用。再仔细想想:
AF出来的是一个Factory,这个factory可以创造一系列产品。而FM所属对象本身就是一个factory,调用FM函数将产生一个产品。
AF---->Factory(自己可能就提供FM)---->Product。它这个和AF是面向不同层次的,AF更加广泛高一些。当然也可以做一个AF类,而且只有一个createProduct函数(本来一个F可能有createA,createB,createC等等)。
这个是和AF比较来看的角度,从其他的使用的情况看,其实就是FMBase派生FMX,FMY,FMZ等重载create函数,这样就可以做到定制化,而且用户只要FMBase接口即可。(??FMX,FMY,FMZ咋来?看来还是得AF来啊),或者像MFC一样,本身就有FMX类似的对象存在。
具体实现上有一些考究:
1 create函数问题,如果今天有A,明天有B的话,则导致基类也要增加这些接口,不如....通过create(Type)一个函数来指定,基类只能创建A,B,继承类能够创建C,D..等,减少了修改。
2 即使这样也很麻烦,得不断派生类,不如用模板吧,终极方法.注意编写方法,是提供一个模板子类,而基类不是模板类。
注意,面向对象的情况下,不同的product 也是共用一个基类的。