读书人

这样的情况如何用工厂模式

发布时间: 2012-03-12 12:45:33 作者: rapoo

这样的情况怎么用工厂模式
下面的情况:

class A 使用class B

class B 使用class C、class D

我想使用工厂模式(工厂方法或抽象工厂),不知道该怎么实现对象的创建:

1 如果说要在A中添加 BFactory 的引用,B中添加 CFactory和 DFactory的引用,那么这些factory应该由谁去创建呢?

2 如果C和D的下一层还要引用别的类对象,那么不就引起工厂泛滥了吗,感觉很恐怖啊

希望大家帮帮!

[解决办法]
仔细想想工厂的作用,有必要用吗,需要应对怎样的变化,组合/关联跟工厂并不冲突,只要能体现事物的本质,一切都是合理的
[解决办法]
如果构造B时需要一些处理(例如B有很多子类,会根据某些条件生成不同的子类),而且A不感知这些创建过程,这时可以使用工厂来隐藏这个创建过程。一般工厂的调用就放在A里。

“class B 使用class C、class D ”也是一样的

工厂方法和抽象工厂的区别就是,前者一般创建单个对象,后者创建一组对象
[解决办法]

探讨
仔细想想工厂的作用,有必要用吗,需要应对怎样的变化,组合/关联跟工厂并不冲突,只要能体现事物的本质,一切都是合理的

[解决办法]
如果创建A时不关心BCD,那么CD的创建由写B代码的人负责,B的创建由写A代码的人负责,简单工厂或工厂模式都可以;如果CD是一组,B那里也许需要抽象工厂;如果ABCD的创建都由调用者负责,那么就必须把每个工厂作为参数传进去了,像这样:
ProductA = AFactory.Create(new BFactory(new CFactory,new DFactory) ) )
这些Factory需要有个基类,构造函数用智能指针之类保存工厂.

读书人网 >C++

热点推荐