我最近看过Netbeans平台开发教程视频(现在称为路径)(http://www.netbeans.org/kb/trails/platform.html)
我一直想知道使用Netbeans的Lookup
是否稳定
这就是我对Lookup如何工作的理解
作为图片:
作为Psudo代码(类结构):
{
((class A implements MyInterface)) , ((class B implements MyInterface))
[MyInterface (API)]
[CoreApplication] ([Lookup provide access to A and B via MyInterface ])
}
我的问题是,与重度耦合相比,上述实现是否会创建可靠的结果(还可以考虑从其他类访问静态变量,方法和内部类的场景)?
[我需要知道,如果我使用松散耦合并使用lookup api来实现它。 与紧密耦合的程序相比,我的程序是否会变得或多或少可靠。 (可靠我的意思是应用程序的稳定性,它会经常崩溃,等等)]
如果是这样,它是如何运作的?
答案 0 :(得分:3)
努力实现松散耦合(以及编程到接口而不是实现)是您应该遵循的基本原则之一。
通过这种方式,您可以稍后更改实现(当您改变主意或更改规范时),而不会影响使用要更改的类的相关代码。
它就像你在经营,并有一个承包商受合同约束,在商定的投入下做某件事。当您决定要另一个承包商(使用相同的输入执行相同的东西,但花费更少或更快)时,您只需更改他而不会影响您的业务。因为你没有紧密耦合。这种不依赖于某个实体并且仅通过接口“连接到它”的原则(具有固定输入/输出的预定义方法集)超出了编程概念,可以应用于生活/业务的其他领域,因为它是有益的事。
答案 1 :(得分:2)
我会说它(也)取决于你是否可靠。
想一想。您在查找中注册了B类,A类需要B类能够提供的服务。所有A类都想要的是服务,如果实现实际上来自B类,C类,D类或其他什么,则无关紧要。因此,通过使用查找,您只需询问您的服务是否可用,如果可用则使用它。这就涉及到可靠性。假设在查找中找不到您正在寻找的服务,那么由您来确保如果找不到该服务,系统不会中断。
NetBeans中的方案可能如下所示:
RequiredService s = Lookup.getDefault().lookup(RequiredService.class);
if (s != null)
{
s.doSomething(); // In this case the responsibility of reliability lies on the side of who implemented this service.
}
else
{
// Now it's up to you to keep it reliable and perhaps let the user know that something went not as expected.
}
现在想象你“紧紧”依赖于RequiredService的实现,突然间,由于某种原因,它已经不存在了。由于模块是在运行时在NetBeans中加载的,因此您将获得那些ClassLoader异常,甚至没有机会决定在这种情况下该怎么做。