四论GProductCreator和FactoryUsingPointer

来源:互联网 发布:济南软件培训学校 编辑:程序博客网 时间:2024/04/29 16:26
在前面我说,根本不需要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");对客户端来说,没有什么比这更舒服了。
原创粉丝点击