簡単な答えは、stop()メソッドも含むすべての通常の操作とのインターフェースを持つことです。
interface Service {
operation( parameters ...);
somethingElse( parameters ... );
stop();
}
stopメソッドの主な問題は、サービスへの参照を取得するほとんどのクライアントが、おそらくサービスも停止できないはずであるということです。
もう1つの方法は、サービスとStoppableの2つのインターフェースを単純に定義することです。
interface Service {
operation( parameters ...);
somethingElse( parameters ... );
}
interface Stoppable {
void stop();
}
このアプローチの唯一の問題は、実装が別のサービスによってラップされている場合、stopメソッドが隠されていることです。
クライアントがサービスを「停止」するのを停止するという元々の問題は依然として発生する可能性があります。最初に参照がStoppableのインスタンスであるかどうかを確認してから、クライアントがそれを「停止」できるようにする必要があります。
この問題をどのように解決しますか?
私は、公共の停留所を利用できるようにすることなく、問題をエレガントに(私にとっては)解決するアイデアを持っています。しかし、それを示す前に、いくつかのアイデアが欲しいです。