gpt4 book ai didi

java - 一个需要停止但不是由客户端停止的服务应该如何停止?

转载 作者:行者123 更新时间:2023-12-01 06:24:53 26 4
gpt4 key购买 nike

简单的答案是拥有一个包含所有常规操作的接口(interface),其中还包括 stop() 方法。

interface Service {
operation( parameters ...);
somethingElse( parameters ... );

stop();
}

停止方法的主要问题是大多数获得服务引用的客户端可能也无法停止该服务。

另一种选择是简单地定义两个接口(interface):服务和 Stoppable

interface Service {
operation( parameters ...);
somethingElse( parameters ... );
}

interface Stoppable {
void stop();
}

这种方法的唯一问题是,如果实现被另一个服务包装,那么 stop 方法就会被隐藏。

阻止客户端“停止”你的服务的原始问题仍然是可能的,他们只需要首先检查引用是否是 Stoppable 的实例,然后他们就可以“停止”它。

你会如何解决这个问题?

我有一个想法,可以优雅地解决问题(对我来说很好),而无需留下可用的公共(public)站点。不过在展示之前,我想要一些想法。

最佳答案

使用接口(interface)继承:

interface Service {
operation( parameters ...);
somethingElse( parameters ... );
}


interface StoppableService extends Service {
void stop();
}

只需要原始服务的客户端可以通过适当的工厂方法获得。任何应该能够停止服务的东西,请求 StoppableService。

如果您担心客户端转换为 StoppableService 可以调用 stop(),那么您将需要具体的实现来分离此函数。给他们一个具有无操作版本的 stop() 的具体实现。您仍然可以让您的工厂向任何应该能够阻止它的人提供 stop() 的有效实现。也许当他们要求您的工厂实现时,他们可以传递适当的凭据,以便您可以确定他们应该能够做什么并为他们提供正确的版本。

关于java - 一个需要停止但不是由客户端停止的服务应该如何停止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4746045/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com