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 哪种设计模式与OSGi非常相似?_Design Patterns_Osgi - Fatal编程技术网

Design patterns 哪种设计模式与OSGi非常相似?

Design patterns 哪种设计模式与OSGi非常相似?,design-patterns,osgi,Design Patterns,Osgi,例如,如果我希望在我的应用程序中使用OSGi的好处(模块化、依赖注入等),而不使用OSGi,我将采用哪种设计模式?您提到的两种模式位于我的列表顶部: 模块化。您没有类装入器隔离的好处,因此您必须使用自己的约定来确保您不会“跨越”其他组件。如果您认为切换到OSGi是您项目的未来,那么您肯定希望避免Class.forName、Thread.getContextClassLoader等,因为它们在OSGi环境中不起作用 服务。您没有service registry的好处,service registr

例如,如果我希望在我的应用程序中使用OSGi的好处(模块化、依赖注入等),而不使用OSGi,我将采用哪种设计模式?

您提到的两种模式位于我的列表顶部:

  • 模块化。您没有类装入器隔离的好处,因此您必须使用自己的约定来确保您不会“跨越”其他组件。如果您认为切换到OSGi是您项目的未来,那么您肯定希望避免Class.forName、Thread.getContextClassLoader等,因为它们在OSGi环境中不起作用

  • 服务。您没有service registry的好处,service registry允许单独模块中的组件相互发现和注册,同时保持松散耦合,因此您需要使用类似的功能。确实有,但除此之外,您可以使用依赖项注入框架来松散耦合


  • OSGi的其余大部分内容是规范保证框架将为您做的事情(JVM单例、安全性、管理、动态性等),因此您可以自己做。也许最简单的方法是查看列表,看看你会错过什么。

    你提到的两个在我的列表顶部:

  • 模块化。您没有类装入器隔离的好处,因此您必须使用自己的约定来确保您不会“跨越”其他组件。如果您认为切换到OSGi是您项目的未来,那么您肯定希望避免Class.forName、Thread.getContextClassLoader等,因为它们在OSGi环境中不起作用

  • 服务。您没有service registry的好处,service registry允许单独模块中的组件相互发现和注册,同时保持松散耦合,因此您需要使用类似的功能。确实有,但除此之外,您可以使用依赖项注入框架来松散耦合


  • OSGi的其余大部分内容是规范保证框架将为您做的事情(JVM单例、安全性、管理、动态性等),因此您可以自己做。查看列表可能是最简单的方法,以查看您将缺少的内容。

    OSGI提供了很多现成的功能。如果您不想使用它,我仍然建议您使用某种框架,例如Spring

    Spring更容易设置,并且有一个依赖项注入容器。当然,您可以按照创建类的方式进行自己的依赖项注入。通常有两种方法可以做到这一点:构造函数注入,其中在对象创建时在构造函数参数中传递所需的类/对象;setter注入,其中类对每个依赖项都有setter。只需确保设置所有依赖项,否则对象可能处于无效状态

    模块化可能意味着很多事情,这取决于您想要走多远。作为一般规则,针对接口编程将获得一定程度的模块化。使用众所周知的软件体系结构,如MVC和相关模式,将为您提供一些方法。OSGI使用白板模式与发布/订阅或侦听器模式,但两者都满足类似的需求。这两种模式都允许对象的广泛解耦


    如果您发布了您想要实现的目标,我可以为您提供更多帮助。

    OSGI提供了很多开箱即用的功能。如果您不想使用它,我仍然建议您使用某种框架,例如Spring

    Spring更容易设置,并且有一个依赖项注入容器。当然,您可以按照创建类的方式进行自己的依赖项注入。通常有两种方法可以做到这一点:构造函数注入,其中在对象创建时在构造函数参数中传递所需的类/对象;setter注入,其中类对每个依赖项都有setter。只需确保设置所有依赖项,否则对象可能处于无效状态

    模块化可能意味着很多事情,这取决于您想要走多远。作为一般规则,针对接口编程将获得一定程度的模块化。使用众所周知的软件体系结构,如MVC和相关模式,将为您提供一些方法。OSGI使用白板模式与发布/订阅或侦听器模式,但两者都满足类似的需求。这两种模式都允许对象的广泛解耦


    如果您发布了您想要实现的目标,我可以为您提供更多帮助。

    这并不能真正回答问题。没有提到设计模式或方法。在我看来,模块的使用和服务注册中心的使用都是模式,我试图给出一些不在OSGi环境中运行时的基本建议。OP没有给出太多细节,但我的答案大概是被要求的细节……这并不能真正回答问题。没有提到设计模式或方法。在我看来,模块的使用和服务注册中心的使用都是模式,我试图给出一些不在OSGi环境中运行时的基本建议。OP没有给出太多细节,但我的回答大概是要求的细节。。。