在前面我说,根本不需要AbstractFactory,GObject系列产品的客户给你一个namespace ConcreteFactoryG接口,而TObject系列产品的客户则给你一个namespace ConcreteFactoryT接口。他们的操作都是一样:createTank(),createBullet(),createBomb(). 然而,我很乐意发现,这个没用的AbstractFactory有很大用处!他的威力在于与FactroyUsingPointer的结合之中。我们不仅仅要让不同系列的产品在不同的工厂里做,我们还需要产品在工厂里批量生产!为了更进一步将客户隔离开,我们只为客户提供每个个产品的标志符,客户只通过标志符得到产品,这就是大家熟知的工厂模式。现在我要将工厂模式和抽象工厂模式结合起来。 namespace AbstractFactory { typdef GCreator GAbstractCreator
; typdef TCreator GAbstractCreator
; } typedef std::string identifier_type; FactoryUsingPointer
theGFactory; FactoryUsingPointer
theTFactory; 产品供应方代码: T系列产品供应方。他可见namespace ConcreteFactroyT 但不可见ConcreteFactroyG。(这很好理解,IBM有他的芯片作坊,对作坊的一切了如指掌,但对apple的公司内部一无所知): theTFactory.Register("tank", &createTank); theTFactory.Register("bomb",&createBomb); G系列产品供应方。他可见namespace ConcreteFactroyG 但不可见ConcreteFactroyT: theGFactory.Register("tank", &createTank); theGFactory.Register("bomb",&createBomb); 客户端代码: (享用T供应方产品) theTFactory.CreateObject("tank"); theTFactory.CreateObject("bomb"); theTFactory.CreateObject("bullet"); (享用G供应方产品) theGFactory.CreateObject("tank"); 对客户端来说,没有什么比这更舒服了。
四论GProductCreator和FactoryUsingPointer
最新推荐文章于 2014-08-03 14:15:58 发布