假设我有这样的课程:
猴鱼类 { MonkeyFish(GlobalObjectA & a, GlobalObjectB & b, GlobalObjectC & c); 私人的: GlobalObjectA & m_a; GlobalObjectB & m_b; GlobalObjectC & m_c; }
如果没有工厂,我需要执行以下操作才能实例化MonkeyFish
.
全局对象A a; 全局对象B b; 全局对象 C c; 主函数() { MonkeyFish * monkey_fish = new MonkeyFish(a, b, c); 猴子鱼->去(); }
另一方面,如果我有MonkeyFishFactory
,似乎我必须这样做:
全局对象A a; 全局对象B b; 全局对象 C c; 主函数() { MonkeyFishFactory mf_factory(a, b, c); MonkeyFish * monkey_fish = mf_factory.buildMonkeyFish("Bob"); 猴子鱼->去(); }
我仍然有全局对象。
即使 MonkeyFishFactory 本身在
GlobalObjects
内部创建了(所以它们现在在 MonkeyFishFactory 内部而不是真正的全局变量中),看起来 MonkeyFishFactory本身仍然需要是一个全局对象,以便我可以随时访问它来创建一个MonkeyFish
.
在这种情况下,工厂模式与全局状态不是一回事吗?
(我目前的假设是全局状态是一件坏事,消除它是一件好事。)