四论GProductCreator和FactoryUsingPointer

在前面我说,根本不需要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"); 对客户端来说,没有什么比这更舒服了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值