在前面我说,根本不需要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
最新推荐文章于 2005-07-28 14:48:00 发布
博客介绍了工厂模式和抽象工厂模式的结合。原本认为无用的AbstractFactory与FactroyUsingPointer结合有很大用处,要让不同系列产品在不同工厂批量生产,为客户提供产品标志符获取产品。还给出了产品供应方和客户端代码示例。
737

被折叠的 条评论
为什么被折叠?



