工厂生产一种产品,其实new也是一个工厂,GoF里还对工厂有更细的划分,但是,这给人的感觉是工厂是从无到有的,其实不是这样,工厂也可以从有到有。
new是一个工厂,它生成的是初级产品。对于一个初级产品来说,你可能想让它个性化,譬如每个学生都有自己的名字,学生都一样,但是用学生产生带名字的学生的过程也是一次工厂作用。
ACE_SOCK_Acceptor和ACE_SOCK_Connector就是这样的工厂。
工厂是用来生成产品的,但是一个工厂未必肯定有机会生产出产品,这对从无到有的工厂来说好理解,我们未调用它而已。对于从有到有的工厂,情况也一样,譬如一个生成带名字学生的工厂,当它得到一个名字信息的时候,才对传递而来的初产品进行加工。如果它永远也没有得到名字信息,这个和永远也没有被调用一样。
这也是ace的这两个工厂给我的启示。
由此可以思考广义的工厂,并试图对是工厂的情况有规范化的工厂予以改造。
譬如new工厂,把new做封装制成GoF的工厂会获得不错的维护优势。对传递引用获取数据的操作,把它做二次加工工厂来考虑也是个不错的想法,尤其当这个被传递的数据是一个对象或结构的时候,用工厂的思想同样可以让你在维护阶段受益。