Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/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
Oop 传递对象与单例_Oop_Singleton - Fatal编程技术网

Oop 传递对象与单例

Oop 传递对象与单例,oop,singleton,Oop,Singleton,就我所见,有两个主要原则如何处理应用程序范围内的角色扮演者对象,如根模型对象(在MVC上下文中): 创建对象并将其传递到对象树(例如,在构造函数中) 将其作为单例或其他全局变量技术提供 第一种方法看起来更干净,因为依赖关系更清晰,但是还有很多额外的工作要做(参数、类变量等等) 你喜欢什么 编辑:第一种技术也只使用一个实例,但它是通过传递对象而不是通过静态函数提供的我更喜欢运行Singleton方法getInstance()作为构造函数参数-一石二鸟;) 我认为作为参数传递内存效率更高,调试更容易

就我所见,有两个主要原则如何处理应用程序范围内的角色扮演者对象,如根模型对象(在MVC上下文中):

  • 创建对象并将其传递到对象树(例如,在构造函数中)
  • 将其作为单例或其他全局变量技术提供
  • 第一种方法看起来更干净,因为依赖关系更清晰,但是还有很多额外的工作要做(参数、类变量等等)

    你喜欢什么


    编辑:第一种技术也只使用一个实例,但它是通过传递对象而不是通过静态函数提供的

    我更喜欢运行Singleton方法
    getInstance()
    作为构造函数参数-一石二鸟;)

    我认为作为参数传递内存效率更高,调试更容易,但需要一些额外的工作

    我更喜欢只在我真正需要的时候使用单例(如数据库会话、写入文件等)


    这实际上取决于项目类型、语言、预算、项目规模等。没有“通用”答案。

    这就是依赖注入可以提供帮助的地方。无论何时创建对象,都必须显式地手动将所有正确的依赖项传递给对象,这可能是一件痛苦的事情,而且可能有点容易出错。一个合适的依赖注入容器可以帮助自动化这个过程,并且实际上比单例更容易使用

    Symfony2框架是一个现代示例:


    很大程度上取决于它是什么样的物体。。。在处理单例时,应该考虑的一个方面是可测试性(使用接口+具体的实现)。让我们假设它是应用程序的主要模型对象,所有其他模型对象聚集在一起。嗯。。。如果您坚持MVC/MVP模式,那么您肯定希望将您的模型传递到视图组件中。除此之外,我没有现成的答案。拥有一个非单体模型可以让你在需要的时候随时交换它,这是一个相关的想法。太棒了!单例的简单性,而不缺少清晰的接口。非常灵活的方法,谢谢:)