0

例として、WAVWAV サウンド ファイルを表すクラスを用意しました。便宜上、WaveformAudioFileまったく同じ機能を持つクラスを追加する必要があります。

考えられるデザイン/スタイルの問題に関係なく、新しいクラスを統合する適切な方法は何ですか? 拡張を使用して (何も追加せずに)、共通のインターフェイスなどを使用して?

編集:これをさらに考えて、設計が考慮される場合、冗長なコードを回避するための代替手段はありますか? つまり、複数のクラスがある場合、インターフェイスを作成するのは面倒です。初期化に使用できるある種のパターン。属性?

4

4 に答える 4

2

私の観点から見ると、インターフェイスは最良のソリューションです。そのような機能を実装するクラスに共通のインターフェイスを宣言し、クラスの型を直接定義する代わりにこのインターフェイスを使用します。

例えば:

ISoundFile mySoundFile = getSoundFile();

ISoundFile宣言されたインターフェイスはどこにありますか。

于 2012-07-20T05:38:16.727 に答える
2

1.設計の観点から、クラスに特定の役割を持たせたい場合は、インターフェイスを選択します。

2.変化し続ける動作がある場合は、それらを Abstract クラスまたは Interface にカプセル化し、それを拡張または実装して特定の機能を指定することをお勧めします。

////////////////////////////////////////編集: ////// ////////////////////////

あなたはDRY の原則 (Dont Repeat Yourself)に言及していると思います。この原則によれば、情報と行動を単一の賢明な場所に保管する方がよいでしょう

しかし、同じ機能の異なるクラスでビヘイビアが異なる場合はどうなるでしょうか。

例:

Paintingを持つクラスと見なしpaint() Methodます。

paint() メソッドには、ストローク、グライディング、シェーディングなどのスタイルを適用できます。

次に、そのメソッドを Abstract クラスまたは Interface にカプセル化することをお勧めします。

public interface Paint{

paintDoIt(String style);

}

面倒な作業ではなく、柔軟性と、あまり多くのクラスに触れたり、コードを壊したりせずに変更を加える機能を持つことです

ソフトウェア エンジニアリングの定数は 1 つだけです CHANGE

だから私たちはそれに適応する必要があります。

于 2012-07-20T05:41:16.060 に答える
1

共通interfaceを使用して、両方のクラスに実装します。主な利点の 1 つは WAVE であり、すべてのクラスは他のクラスも拡張できます。

于 2012-07-20T05:36:58.993 に答える
0

誰かに興味があるかもしれないので、これを追加するだけです。別の解決策を考えましたが、それは単にラッパークラスを使用することです:)。

于 2012-09-09T01:54:16.597 に答える