三论GProductCreator和FactoryUsingPointer

来源:互联网 发布:plsql登录数据库空白 编辑:程序博客网 时间:2024/06/02 12:02
我c/c++版发表了这篇文章的第(一)(二)两部分,现在我把它的第三部分发表到c/c++,vc++,设计模式,类库及组件版,因为我发觉这两个东西和这些版块都有关联,同时它们也值得让更多人了解。 我很郁闷我发出去的文章居然没有一个换行`_`,给大家阅读带来极大不便只能说sorry(也代管理员说sorry)./n///n/////n 我昨天晚上发现,利用GAbstractCreator和GProductCreator可以很容易实现Abstract Factory模式,只需要几组#define,所以我可以说,我们现在拥有了一个抽象工厂自动生成器!假设GOject,TObject是两个继承体系的基类,GTank,GBullet,GBomb继承自GObject,而TTank,TBullet,TBomb继承自TObject那么我可以定义一个抽象工厂,只用namespace和#define!namespace ConcreteFactroyG{#define createTank GProductCreator();#define createBullet GProductCreator();#define createBomb GProductCreator(); }namespace ConcreteFactroyT{#define createTank GProductCreator();#define createBullet GProductCreator();#define createBomb GProductCreator(); }不同的工厂做不同系列的产品,这句话大约体现了抽象工厂的本质,你在这里清晰的看到了这种本质。Loki的抽象工厂提供了更好的灵活性,但是太过于复杂难于看懂(呵呵,我也没看全懂),而且它似乎没有提供CreatePolicy,所有的产品一律用new生成,然而在上面的抽象工厂中,你可以为任何产品定制一个creator(为GProductCreator提供第三个参数)。根本不需要AbstractFactory,但是后面我们将会看到,AbstractFactory是有用的。
原创粉丝点击