Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 直接注入、工厂模式、单体模式_Design Patterns_Singleton_Factory_Factory Pattern - Fatal编程技术网

Design patterns 直接注入、工厂模式、单体模式

Design patterns 直接注入、工厂模式、单体模式,design-patterns,singleton,factory,factory-pattern,Design Patterns,Singleton,Factory,Factory Pattern,我的程序有一个窗口,可以在其中绘制和处理模型(类)。许多其他类(对象)在运行时将使用这两个类。因此,我需要保留对它们的引用。到目前为止,我只是在主GUI类中保留了两个指针作为成员变量,但现在我想使用更好的策略。单例模式似乎是理想的,但许多人认为最好不要使用。替代方案似乎是直接注入(我认为这对我的情况并不理想)或其他模式,如工厂模式。但是工厂模式创建了一些东西,并且没有保留对所创建的东西的引用,或者我错了吗?有没有其他模式可以帮助我拥有某种全局容器来保存对许多其他对象将使用的对象的引用 我不确定您

我的程序有一个窗口,可以在其中绘制和处理模型(类)。许多其他类(对象)在运行时将使用这两个类。因此,我需要保留对它们的引用。到目前为止,我只是在主GUI类中保留了两个指针作为成员变量,但现在我想使用更好的策略。单例模式似乎是理想的,但许多人认为最好不要使用。替代方案似乎是直接注入(我认为这对我的情况并不理想)或其他模式,如工厂模式。但是工厂模式创建了一些东西,并且没有保留对所创建的东西的引用,或者我错了吗?有没有其他模式可以帮助我拥有某种全局容器来保存对许多其他对象将使用的对象的引用

我不确定您是否需要更改引用的保存方式。主GUI类跟踪作为应用程序一部分创建的内容,这是完全合理的

使用Singleton基本上意味着“创建除主GUI类之外的其他对象,以跟踪创建的对象。现在,不再询问GUI类,而对象将询问Singleton。如果他们已经询问GUI类,它将实现与Singleton相同的目的

因此,如果您的代码如下所示:

object.myMethod {
<...>
  draw(mainGuiClass.textWindow, bla, bla, bla);
object.myMethod{
绘制(mainGuiClass.textWindow,bla,bla,bla);
…而且textWindow是静态的,您可能已经将mainGuiClass作为一个单例使用了

如果所发生的情况是调用的方法与此对象类似。someMethod(mainGui.textWindow,bla,bla,bla,bla)或创建的对象引用了mainGuiClass或mainGuiClass.textWindow,则您正在使用某种注入


这有帮助吗?

如果您希望窗口和模型是单实例的,请使用Singletone。我理解对了吗,您希望它们是单实例的吗?

是的,您的想法实际上与我的想法相同,我只是想确定没有其他合理的方法……我现在做的是创建一个单独的类,全局的,我将其实例化在我的主GUI类的构造函数中,我给了我以后需要的每个对象。这是很实用的,因为我从主GUI类中删除了我的应用程序逻辑内容,让它只处理按钮单击之类的事件,…现在我有了一个单独的类,它保存了其他对象将来需要的所有对象。所有这些ing else是通过访问全局数据注入的。我更喜欢用对象的主题配置对象(这里是对windows或中央GUI对象的引用)在创建时,因为它使我的设置中的单元测试更快、更容易。使用Factory的一个要点是,您可以延迟创建对象以减少启动时间,但在GUI类中也可以这样做。您的真正目标是拥有大量独立的通用部件,这些部件由主系统组装、配置和协调应用程序类。您是在一个类中收集所有创建/配置/协调,还是在多个类中收集所有创建/配置/协调,取决于您。在通用位中,您应该避免硬编码引用主GUI类或sigleton,因为这会使重用更加困难,并且倾向于推广非通用的代码。我只希望有一个全局位置来存放我的数据,以便e后来被其他对象使用..所以,你不想使用factory?因为factory可以生成许多相同的对象。我认为,Singletone可以满足你的需要。是的,我知道,但正如Anders所说,它只是将问题转移到其他地方。如果你创建了一些东西,并且需要跟踪它,那么只需将它声明为该类中的成员变量,我其他一切