クラスにある一連の関数があります。これらの関数は、共通性が最も低いセットです。
これを実行できるようにするには、特定の情報を生成する必要がありますが、この情報は 2 つのルートのいずれかからクラスに到達する可能性があります。
状況をまとめてみますと……。
次のようなクラスがあるとしましょう。
public class onHoliday(){
private Object modeOfTravel;
private Object location;
public onHoliday(Object vehicle, Location GPScoords) {
}
private boolean haveFun() {
//function to have fun, needs 4 people
}
}
車か自転車のどちらかで休暇に行けると想像してみましょう。
私のhaveFun()
機能は、私の車両のタイプに依存します。
ただしゆるくだけ。車両タイプを判別し、必要な値を抽出する別の関数があります。たとえば、車を送った場合、一度に 4 人を獲得できるかもしれませんが、自転車を送った場合、必要な 4 人を獲得するには少なくとも 2 人必要です。
現在、次の 2 つのオプションがあります。
コンストラクターをオーバーロードして、2 台の自転車または 1 台の車をコンストラクターに送信できるようにします。次に、2 つの中間関数のいずれかを呼び出すことができます (たとえば、4 人の名前を取得するため)。
haveFun()
これが現在行っていることです。 .2 つのコンストラクターを 2 つの別個のクラスに分割
haveFun()
し、3 番目のクラスで my を繰り返します。これは、他の 2 つのクラスのオブジェクトになります。これに関する私の問題は、中間関数がすべて数行のコードであり、それらを別のファイルに入れたくないということです! (私はいつもクラスを別々のファイルに入れます!)
注意してください、私haveFun()
はこれらの 2 つのクラスの外で必要になるものではありません(つまり、週末や夜にonHoliday
何かをする可能性はありません!)。haveFun()
私はインターフェイスに入れることについて考えhaveFun()
ましたが、メソッドが 1 つしかないインターフェイスを持つのは少し価値がないようです! それでも、自転車用と車用の両方のクラスでメソッドを使用する必要があります。
onHoliday
クラスで任意のオブジェクト タイプを受け入れられるようにすることを考えましたが、誰かが誤ってボートをonHoliday
クラスに送り込むことは望ましくありません (私は泳げないので、そのようなことは起こらないと想像してください)。
onHoliday
私のクラスはパッケージプライベートであり、最終的であることに注意することが重要かもしれません. 実際には、他のクラスの他の「プライベート メソッド」を介してのみアクセスされ、プライベート メソッド自体しかありません。
編集1:
データを onHoliday() クラスに送信するクラスでこれを処理することを誰かが提案すると確信しています。しかし、このクラス ( travel() と呼びましょう) には、私が使用している車両の種類を気にする理由はありません。気にするようにすると、問題をツリーのさらに上の別の場所に移動しただけです。そして今、すべての中間クラスを車または自転車のいずれかにアクセスするように書き直す必要があります。今のところ、それらは単純に車両オブジェクトを受け入れます。このオブジェクトには、自転車か車かを判断するためのブール値スイッチがあります。
編集2:
楽しみを実行するための抽象クラスを作成し、それを自転車または車のクラスのいずれかで「内部クラス」として実装することについて、別のことがありました。次に、バイクまたはクラスのメンバーにアクセスできます。これも意味がありますか?
注: おそらく、onHoliday() クラスで少なくとも 4 人が参加していることを確認する必要があることに言及する必要があります。
たぶん、それを考える別の方法は...
複数ページのファイルを取得し、渡されたページ番号のリストから必要なページを抽出できます。または、複数のファイルのリストを取得できます。
最初のケースでは単一のファイル オブジェクトを送信し、2 番目のケースではページ番号を選択して複数のファイル オブジェクトを送信します (関心のあるファイルを事前に選択します)。
実際、それはおそらくより良い説明です