1

一連のオブジェクトによって実装される BaseInterface がある状況がいくつかあります。これらのオブジェクトは通常、Serializable や Counatble などのインターフェイスも実装する必要があります。BaseInterface を実装するクラスによって実装されているものとしてこれらの追加のインターフェイスをいつ指定するか、または BaseInterface にこれらの追加のインターフェイスを拡張させる方がよい場合は、今のところ不明です。私は、どちらのアプローチの影響の概要と、特定の状況でどのアプローチを取るべきかを判断できる一連の簡単なルールを探しています。

わかりやすくするために、両方のアプローチのコードで簡単な例を示します。

アプローチ 1: 基本インターフェースを拡張する

interface BaseInterface extends Countable, Serializable {}

class Implementation implements BaseInterface{}

アプローチ 2: 実装で個々のインターフェイスを実装する

interface BaseInterface {}

class Implementation implements BaseInterface, Countable, Serializable {}

多くの場合、BaseInterface を実装する何かが Countable であると想定できるようにしたいようですが、OTOH はこれを必要とせず、Countable を実装する必要がない BaseInterface の実装を妨げる可能性があります。次に、インターフェイス分離の原則もあります。これにより、アプローチ 1 のようにインターフェイスを拡張することに慎重になります。

注: この質問は、インターフェイス実装句をどこに置くかに関するものです。継承によるコード共有ではありません。

4

1 に答える 1

0

私は解決策を提案します:

interface BaseInterface {}

abstract class AbstractBase implements BaseInterface {}

abstract class AbstractBaseCountable implements BaseInterface, Countable {}

abstract class AbstractBaseCountableSerializable implements BaseInterface, Countable, Serializable {}

class Implementation extends AbstractBase/* OR AbstractBaseCountable 
OR AbstractBaseCountableSerializable */ {}

したがって、さまざまな望ましい特性のそれぞれを持つクラスを作成できます。さらに、特定の実装では抽象クラスであるため、実装クラスがよりクリーンになります。

于 2013-02-19T15:26:18.703 に答える